gpt4 book ai didi

c - pthread_mutex_lock 锁定,但未设置所有者

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:11 24 4
gpt4 key购买 nike

这几天我一直在研究这个 -

作为背景,我正在努力将单线程 C 程序变成多线程。我最近发现了一个新的死锁案例,但是当我查看 gdb 中的互斥锁时,我看到了

__lock=2 但 __owner=0

这不是递归互斥量。有人见过这个吗?我正在处理的程序是一个守护进程,这种情况只会在以高吞吐率执行超过 20 分钟(大约)然后放松负载后才会发生。如果您有任何想法,我将不胜感激。

编辑 - 我忘记提到此时我的所有其他线程都处于空闲状态。

干杯

最佳答案

这是意料之中的。普通(非递归、非错误检查)互斥量不需要存储其所有者,跳过查找调用者线程 ID 的步骤可以节省一些时间。 (这在 x86 上几乎没有什么区别,但在 ABI 损坏的 MIPS 等平台上可能会有很大的不同,在这些平台上没有线程寄存器,获取线程 ID 会导致内核空间出错。)

您看到的死锁几乎可以肯定是由于线程试图锁定它已经持有的互斥量,或者是两个或多个线程各自等待另一个持有的互斥量的实际逻辑错误。

关于c - pthread_mutex_lock 锁定,但未设置所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14842976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com