我怀疑,根据我的代码行为,如果我有一个boost::thread_group访问一个由boost::recursive_mutex保护的对象,互斥锁不会阻止组内的线程同时进入受保护区域。
这很令人困惑,因为我看到了调试器(xcode)中列出的所有线程。
这是一个已知的问题吗?我在上面找不到任何文档。
根据定义,所有线程都是独特的。
因此,如果您的互斥对象未能…"mut-ex"(互斥),则表明其他地方存在程序员错误。
一时兴起,我建议您可能对互斥对象的期望(递归或非递归)不准确(就像对线程组的期望一样)?
您可能忽略了所有访问共享对象的方在这些访问的任何时候都必须获取互斥对象。仅仅让一个线程"保护"共享对象,神奇地将其他线程拒之门外是不够的。
互斥是一种合作主张。"关键部分"一词在这方面实际上有点好:在代码中"标记"关键部分,而不是"标记"重要数据(不管是什么)。