【问题标题】:std::mutex :: when the lock acquired thread gets killed what would happen to other waiting threads with respect to std::mutex locksstd::mutex :: 当获得锁的线程被杀死时,对于 std::mutex 锁,其他等待线程会发生什么
【发布时间】:2021-06-14 05:18:35
【问题描述】:

多个线程试图访问一个关键区域并假设我们使用std::mutex 锁定它。 现在其中一个线程获得了锁,如果它被杀死了一段时间后......系统行为会是什么?类似于 pthread mutex 健壮,我们对std::mutex 有什么要求吗?

【问题讨论】:

  • AFAIK 标准 C++ 并没有首先定义任何杀死线程的方法。如果您的实现提供了诸如扩展之类的东西,那么您必须查看它的文档以了解它如何处理持有的锁。
  • "...one of the thread acquired the lock and after sometime if it gets killed" 是什么意思?该线程是如何“杀死”的?
  • 但是线程有可能因为某些未知原因而终止,对吧?如果是这样,如果 tat 线程持有锁,那我很感兴趣!内核因某种信号或任何原因而终止线程。线程终止总是可能正确的?
  • “我更感兴趣的是,如果发生这样的终止会发生什么。”然后我再说一遍:告诉我们您想了解什么实现(编译器/OS/库/等)。没有这些信息,这个问题是无法回答的,或者充其量,答案只是微不足道的“行为未定义”。
  • "...如果互斥锁被销毁但仍由任何线程拥有,或者 线程在拥有互斥锁时终止,则程序的行为未定义。 ..." en.cppreference.com/w/cpp/thread/mutex

标签: c++ multithreading


【解决方案1】:

类似于 pthread mutex 健壮,我们有什么可用于std::mutex 的吗?

不,我们没有。反正不在系统上,我知道。

在 POSIX 系统上,必须在创建互斥锁时设置互斥锁的“稳健性”。由于 mutex 是由 std::mutex 构造函数创建的,并且 this 没有 'robustness' 参数,因此这是不可能的。

在 Windows 上,没有针对互斥体/临界区对象的“稳健性”设置。

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2017-03-28
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多