boost :: thread_group中的所有线程都与boost :: recursive_mutex共享相同的线程

时间:2015-02-04 22:14:17

标签: c++ multithreading boost mutex boost-mutex

我怀疑基于我的代码的行为,如果我有一个boost :: thread_group访问受boost :: recursive_mutex保护的对象,则互斥锁不会阻止组内的线程同时进入受保护区域。

这很令人困惑,因为我看到了调试器(xcode)中列出的所有线程。

这是一个已知问题吗?我无法找到任何文件。

1 个答案:

答案 0 :(得分:1)

boost thread_group是一组线程。

根据定义,所有线程都是独特且独特的。


因此,如果您的互斥锁未能......“mut-ex”(相互排除),则表示其他地方存在程序员错误。

一时兴起,我建议你对互斥体的期望(递归或非递归)可能不准确(与线程组的期望类似)?

您可能错过的是访问共享对象的所有方/必须/在这些访问的所有时间获取互斥锁。 还不够让一个线程“保护”共享对象,以神奇地保留其他线程。

互斥是一个合作的主张。在这方面,术语“临界区”实际上更好一些:你在代码中“标记”关键部分,而不是“标记”关键数据(不管是什么)。