文章目录
- 介绍
- 讨论
- 实际使用
- 结论
介绍
https://linux.die.net/man/3/pthread_cond_wait
从上面的使用说明上看,在调用pthread_cond_wait之前,需要确保,mutex已经lock了。如果调用这个函数的时候,不能确定mutex已经lock。可能会出现未定义的行为。潜在会留下一些问题,但是不一定什么时候出现,这就为问题调试埋下了隐患。
The pthread_cond_timedwait() and pthread_cond_wait() functions shall block on a condition variable. They shall be called with mutex locked by the calling thread or undefined behavior results.
讨论
下面这个链接里有一个关于返回值判断的讨论。结论是说不太可能发生这些个错误,里面有一些解释。有待商榷。
https://github.com/samtools/htslib/issues/1366
实际使用
std::mutex使用的时候,是有判断返回值,如果出现错误,直接抛出异常;没有具体区分是什么errno。
1
2
3
4
5
6
7
8
9
10void lock() { int __e = __gthread_mutex_lock(&_M_mutex); // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may) if (__e) __throw_system_error(__e); }
结论
还是需要判断返回值;
如果出现错误,就需要从根源上找问题,不要等出现未定义行为时再找,因为找起来非常的困难。
最后
以上就是孤独高跟鞋最近收集整理的关于glibc: pthread: pthread_mutex_lock 返回值的判断,pthread_cond_wait介绍讨论实际使用结论的全部内容,更多相关glibc:内容请搜索靠谱客的其他文章。
发表评论 取消回复