【发布时间】: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