我有一个使用 pthreads 的 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)