我怀疑基于我的代码的行为,如果我有一个 boost::thread_group 访问一个受 boost::recursive_mutex 保护的对象,那么互斥锁不会阻止组内的线程同时进入保护区。
这很令人困惑,因为我看到了调试器(xcode)中列出的所有线程。
这是一个已知的问题?我找不到任何关于它的文档。
我怀疑基于我的代码的行为,如果我有一个 boost::thread_group 访问一个受 boost::recursive_mutex 保护的对象,那么互斥锁不会阻止组内的线程同时进入保护区。
这很令人困惑,因为我看到了调试器(xcode)中列出的所有线程。
这是一个已知的问题?我找不到任何关于它的文档。
boost thread_group 是一组线程。
根据定义,所有线程都是不同且独特的。
因此,如果您的互斥锁无法...“mut-ex”(相互排除),这表明其他地方存在程序员错误。
一时兴起,我建议您对互斥锁(递归或非递归)的期望可能不准确(与线程组的期望类似)?
您可能错过的事情是访问共享对象的所有各方/必须/在这些访问的任何时候都获取互斥锁。让一个线程“保护”共享对象以神奇地将其他线程拒之门外是不够的。
互斥体是一个合作命题。在这方面,术语“关键部分”实际上更好一点:您在代码中“标记”关键部分,而不是“标记”关键数据(无论是什么)。