【问题标题】:Do all threads in boost::thread_group share the same thread with respect to boost::recursive_mutex对于 boost::recursive_mutex,boost::thread_group 中的所有线程是否共享同一个线程
【发布时间】:2015-04-04 15:11:51
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    boost thread_group 是一组线程。

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


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

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

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

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

    【讨论】:

    • 完全正确:互斥锁不保护任何变量或值或内存空间。互斥锁是一组只有一把钥匙的门。您在要保护的区域周围放置门,并保证任何时候只有 1 个线程可以打开任何门。
    • 我认为我对互斥锁的理解已经足够准确了。
    • @JasonHarrison 好的!当然,这只是一种预感,基于你提到的几件事(这是模棱两可的,所以如果你说你这样做,我相信你)。随意忽略那部分。
    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2017-11-18
    相关资源
    最近更新 更多