根据这个官方页面,上面写着(强调我的):
线程安全
不同的物体:安全。
共享对象:
安全,除了 restart() 的特定例外 和notify_fork() 函数。当存在时调用 restart() 未完成的 run()、run_one()、run_for()、run_until()、poll() 或 poll_one() 调用会导致未定义的行为。通知_fork() 不应在任何 io_context 函数或任何 与 io_context 关联的 I/O 对象上的函数是 在另一个线程中被调用。
一般来说,在讨论线程安全时,我们关注的是同一对象在多个线程中读/写的行为。
为什么要强调不同对象的线程安全性?
他们通过图书馆的公共界面与您交谈。图书馆内部所做的事情他们必须考虑为您提供的保证,但他们不需要告诉您所有血淋淋的细节。
一个愚蠢的反例:
struct bar {
private:
static int foo; // defined elsewhere
public:
int do_something(){
foo+=1;
return foo;
}
};
作为用户,我只需要知道
do_something
foos the bar,但内部如何实现则取决于实现。在文档中,我希望库告诉我同时在两个单独的 do_something
实例上调用 bar
是不安全的。