【发布时间】:2011-10-05 12:56:44
【问题描述】:
我已经为此工作了几天 -
作为背景,我正在开发一个单线程 C 程序并使其成为多线程。我最近发现了一个新的死锁案例,但是当我查看 gdb 中的互斥锁时,我看到了
__lock=2 还是 __owner=0
这不是递归互斥锁。有人见过这个吗?我正在处理的程序是一个守护程序,这种情况仅在以高吞吐量率执行超过 20 分钟(大约)然后放松负载后才会发生。如果您有任何想法,我将不胜感激。
编辑 - 我没有提到此时我的所有其他线程都处于空闲状态。
干杯
【问题讨论】:
-
一些来源,任何建立上下文的来源都会非常有帮助。
-
@nos 我在 valgrind 中运行了很多次以检查一切是否正常,但我会再做一些,看看我是否犯了一些新错误。
-
@Josh - 整个代码超过 20 万行。守护进程通过按顺序将 放入队列并定期检查它们是否已准备好执行来跟踪定时任务,因此查看此对象及其互斥锁的唯一时间是检查它是否已准备好执行。如果是,则将其从队列中删除并调用该函数。除此之外,它仅在其他对象按顺序插入时被访问以检查其时间。
-
如果你的互斥锁没有被正确初始化,你可能会得到这样的结果。
-
@nos - 这是我的第一个想法,但这个互斥锁总是被初始化(它只在一个函数中创建)。