为什么Boost强调不同对象的线程安全性?

问题描述 投票:0回答:1

根据这个官方页面,上面写着(强调我的):

线程安全

不同的物体:安全。

共享对象:

安全,除了 restart() 的特定例外 和notify_fork() 函数。当存在时调用 restart() 未完成的 run()、run_one()、run_for()、run_until()、poll() 或 poll_one() 调用会导致未定义的行为。通知_fork() 不应在任何 io_context 函数或任何 与 io_context 关联的 I/O 对象上的函数是 在另一个线程中被调用。

一般来说,在讨论线程安全时,我们关注的是同一对象在多个线程中读/写的行为。

为什么要强调不同对象的线程安全性?

c++ thread-safety boost-asio
1个回答
0
投票

他们通过图书馆的公共界面与您交谈。图书馆内部所做的事情他们必须考虑为您提供的保证,但他们不需要告诉您所有血淋淋的细节。

一个愚蠢的反例:

struct bar {
    private:
        static int foo;  // defined elsewhere
    public:
        int do_something(){ 
            foo+=1;
            return foo;
        }
 };

作为用户,我只需要知道

do_something
foos the bar,但内部如何实现则取决于实现。在文档中,我希望库告诉我同时在两个单独的
do_something
实例上调用
bar
是不安全的。

© www.soinside.com 2019 - 2024. All rights reserved.