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