1

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

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

这是一个已知的问题?我找不到任何关于它的文档。

4

1 回答 1

1

boost thread_group 是一组线程。

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


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

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

您可能错过的事情是访问共享对象的所有各方/必须/在这些访问的任何时候都获取互斥锁。让一个线程“保护”共享对象以神奇地将其他线程拒之门外是不够的。

互斥体是一个合作命题。在这方面,术语“关键部分”实际上更好一点:您在代码中“标记”关键部分,而不是“标记”关键数据(无论是什么)。

于 2015-02-04T22:19:24.663 回答