我知道pthread_cond_wait可以解锁附带的互斥锁。我想找到的是pthread_cond_wait的源代码,并找到解锁互斥代码。如果问题很愚蠢,请谅解。 :)。我必须下载并检查哪个图书馆。我正在使用Ubuntu。pthread_cond_wait解锁附带的互斥锁。源代码?
1
A
回答
3
pthread_cond_*
函数和pthread_mutex_*
函数是NPTL的一部分,它现在是任何现代Linux机器上的glibc
的一部分。最新版本是glibc-2.11.1
,您可以在GNU glibc download site上找到源代码。
2
另一种选择是OpenSolaris source;如果你对linux感兴趣,也就是glibc,@David Schwartz的答案可能更“准确”。
0
虽然这不完全是您的问题的答案,但互斥锁解锁发生的重要方面是必须在之后执行条件变量结构更新以反映服务员存在。这是标准的意思,当它说功能“原子”解锁互斥和等待。否则,就会出现相同的竞争条件,就像在调用pthread_cond_wait
之前自己解锁互斥体一样:另一个线程可以获取互斥体,并在检查谓词(并且发现它为假)之后修改谓词依赖的状态,但在调用之前pthread_cond_wait
。然后,你会错过信号,并继续等待cond var,或许永远。
相关问题
- 1. pthread_cond_wait不解锁互斥锁
- 2. Multile pthread_cond_wait唤醒并保持互斥锁
- 3. 互斥锁/解锁命令
- 4. 互斥锁和锁
- 5. 了解互斥锁类
- 6. 锁定多个互斥锁
- 7. 在互斥代码中发生死锁
- 8. 互斥/锁定与范围/代码块
- 9. 使用waitKey时,“试图解锁未被锁定的互斥锁”
- 10. 访问类数据时替代互斥锁/解锁
- 11. pthread_cond_wait()不释放互斥锁的可能原因?
- 12. pthread互斥锁两个线程互锁锁定/解锁是否有效?
- 13. 带互斥锁的WCF Web方法
- 14. pthread_getspecific和互斥锁
- 15. 释放互斥锁。
- 16. 实现互斥锁?
- 17. 尝试锁互斥锁或等待,直到解锁
- 18. 呼叫调用pthread_cond_wait没有锁定互斥
- 19. pthread_cond_wait /信号和互斥锁未按预期方式工作
- 20. 锁定互斥锁的分段错误
- 21. 成功的互斥锁锁定
- 22. 多线程互斥锁可以使用多个互斥锁
- 23. 哪里解锁pthread中的互斥?
- 24. 在C++ 98互斥锁中锁定变量共享数据互斥锁
- 25. 解锁从定时接收互斥解锁
- 26. 南特的互斥锁
- 27. 互斥锁的顺序
- 28. 永久互斥锁造成死锁?
- 29. C# - 锁定互斥锁问题
- 30. 函数可以锁定互斥锁吗?
应该指出的是,这个实现有一些严重的未解决的错误,其中很多连接到:http://sourceware.org/bugzilla/show_bug.cgi?id=13165 – 2012-02-02 17:16:21
@R ..哇,谢谢为链接。这是非常不幸的,这些都是不正确的condvar实施的明确迹象。 – 2012-02-02 19:37:35
是的。这一切似乎都源于他们正在试图解释清醒次数的一些黑魔法,显然是为了消除所有虚假清醒。然而,我已经从bug报告中运行了测试用例,同时针对NPTL condvar实现和我自己的实现,它们不使用任何这样的黑客,也没有能够得到任何虚假的wakes,所以我的结论如此远远是他们防止虚假唤醒的努力是不必要的,并且(由于错误)简直是有害的... – 2012-02-03 00:42:27