在 CPython 中,当互斥锁的拥有线程被“杀死”时会发生什么?

In CPython what happen to a mutex when its owning thread is "killed"?

提问人:Florian Masy 提问时间:10/27/2023 最后编辑:Florian Masy 更新时间:10/27/2023 访问量:16

问:

正如标题所述,我有一个关于 CPython 中的线程和互斥锁的问题。 所以我的程序使用多个线程,其中一个线程是负责的“控制器” 监视其他线程。

当我检测到一个线程在其主循环开始时没有实现其时间戳时,我将其标记为未运行并尝试“删除”它。

在这种情况下,控制器会执行以下操作:

self.__thread_set_state(thread_id=self.job_thread_main.ident, running=False)
del self.job_thread_main

然后我启动一个新线程来“重新启动”相应目标代码的执行

self.job_thread_main = threading.Thread(target=self.jobd_main)
self.job_thread_main.start()

但似乎新线程没有进入其主循环,因为时间戳没有更新。在主循环之前,执行了一些代码,这些代码将尝试获取互斥锁。

是否有可能前一个线程始终拥有互斥锁?

即使它不是一个理想的解决方案(重构实际代码正在讨论中,但这需要时间),是否有任何方法可以确保线程被杀死,更重要的是它拥有的互斥锁被释放,如果没有被释放,如何释放这些互斥锁?

Python 多线程 锁定 互斥锁

评论

0赞 Péter Szilvási 10/27/2023
如何调用这些函数?你能提供一个最小的可重现示例,以便我可以测试你的代码吗?它使我能够调试您的问题。
1赞 Solomon Slow 10/27/2023
IDK 专门针对 Python,但在许多环境中,如果线程在持有互斥锁时死亡,则互斥锁在进程生命周期的剩余时间内保持锁定状态。通常没有安全的方法可以让一个线程杀死另一个线程。

答: 暂无答案