【发布时间】:2013-01-22 02:30:38
【问题描述】:
我有一个使用 pthread 的 C 应用程序。
两个线程(例如 A 和 B)之间存在锁争用,其中 A 先获得锁,而 B 正在等待锁,一旦 A 完成并释放锁,B 仍然没有获得它,然后而 A 再次获得锁(A 确实在循环中获取和释放)。
如果我将我的进程附加到 gdb 并在线程 A 放弃锁定并手动继续线程 B 后暂停线程 A,然后它会获取它并执行所需的操作。
对我来说,这看起来不像是死锁。 什么可能阻止线程 B 获得锁?非常感谢任何帮助。
示例代码:
线程A:
while (true)
{
lock.acquire(lock)
// Do stuff
lock.release(lock)
// Do more stuff
}
线程 B:
lock.acquire(lock)
// Do some stuff
lock.release(lock)
【问题讨论】:
-
请贴一些代码。描述严重不足。
-
你熟悉饥饿这个概念吗?
-
你用的是什么类型的“锁”?
-
我在这里使用 pthread_mutex_lock
标签: c locking pthreads scheduling deadlock