Alb*_*ert 9 c++ boost boost-signals
我在多个地方读到Boost.Signals不是线程安全但我没有找到更多关于它的细节.这个简单的引用并没有说真的那么多.现在大多数应用程序都有线程 - 即使它们试图是单线程的,它们的一些库也可能使用线程(例如libsdl).
我想实现没有其他线程无法访问插槽的问题.所以在这个意义上它至少是线程安全的.
但到底有什么作用,哪些不行?只要我不同时访问它,它是否可以在多个线程中使用它?即如果我在插槽周围建立自己的互斥锁?
或者我被迫只在我创建它的那个线程中使用插槽?或者我第一次使用它的地方?
我认为它也不太清楚,其中一位图书馆评论员在这里说:
我也不喜欢只有三次'thread'这个词被命名的事实.Boost.signals2希望成为一个"线程安全信号"库.因此,应该向用户提供一些更多细节,尤其是关于该区域的更多示例.
解决问题的一种方法是转到源,看看他们使用_mutex/lock()来保护它们.然后想象一下,如果那些电话不存在会发生什么.:)
从我可以收集到的,它确保简单的事情,如"如果一个线程正在进行连接或断开,这将不会导致不同的线程迭代通过附加到这些信号的插槽崩溃".有点像使用线程安全版本的C运行时库如何确保如果两个线程同时进行有效调用,printf则不会发生崩溃. (更不用说你得到的输出会有任何意义 - 你仍然要负责更高阶的语义.)
它似乎不像Qt,其中某个槽的代码运行的线程是基于目标槽的"线程关联"(这意味着发出信号可以触发许多不同线程上的槽并行运行.)但我想不支持这就是为什么boost :: signal"combiners"可以做这样的事情.