gpt4 book ai didi

c++ - Boost:Boost.Signals 中究竟有什么不是线程安全的?

转载 作者:可可西里 更新时间:2023-11-01 16:40:08 26 4
gpt4 key购买 nike

我在多个地方读到 Boost.Signals 不是线程安全的,但我还没有找到更多关于它的细节。这个简单的引述并没有说太多。现在大多数应用程序都有线程 - 即使它们试图成为单线程,它们的一些库也可能使用线程(例如 libsdl)。

我猜这个实现没有其他线程不访问插槽的问题。所以它至少在这个意义上是线程安全的。

但是究竟什么有效,什么无效?只要我不同时访问它,从多个线程使用它是否可行? IE。如果我在插槽周围构建自己的互斥量?

或者我是否被迫只在我创建它的线程中使用该插槽?或者我第一次使用它的地方?

最佳答案

我也觉得不太清楚,图书馆审稿人之一said here :

I also don't liked the fact that only three times the word 'thread' was named. Boost.signals2 wants to be a 'thread safe signals' library. Therefore some more details and especially more examples concerning on that area should be given to the user.

一种解决方法是 go to the source看看他们使用 _mutex/lock() 来保护什么。然后想象一下如果没有这些电话会发生什么。 :)

据我所知,它确保了一些简单的事情,比如“如果一个线程正在连接或断开连接,那将不会导致另一个线程迭代通过附加到这些信号的插槽崩溃”。有点像使用 C 运行时库的线程安全版本如何确保如果两个线程同时对 printf 进行有效调用则不会发生崩溃。 (并不是说您将获得的输出有任何意义——您仍然要对高阶语义负责。)

它似乎不像 Qt,其中某个插槽的代码运行的线程是基于目标插槽的“线程亲和性”(这意味着发出信号可以触发许多不同线程上的插槽运行)并行。)但我想不支持这就是为什么 boost::signal “组合器”可以 do things like this .

关于c++ - Boost:Boost.Signals 中究竟有什么不是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1823643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com