锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C语言开源技术 / pthread_mutex_trylock止、pthread_mutex_trylock注意事项
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

pthread_mutex_trylock卡、pthread_mutex_trylock注意事项


背景

近期在linux下写生产消费者模型,用到了线程互斥,自然用到了pthread_开头函数,这些函数里pthread_mutex_trylock是尝试锁定,不会阻塞线程,觉得用了好,但是用了后使用互斥的函数功能异常,pthread_mutex_trylock卡了,开始找不到问题,还改用了std::mutex,同样不好用,后来认真查文档发现了我使用问题。有些知识点或代码片段不经常用,熟悉程度下降,导致了问题。

pthread_mutex_trylock注意事项

pthread_mutex_trylock后是不能使用pthread_mutex_lock函数,pthread_mutex_trylock本身也是包含lock功能,不要只看try,忘记了lock。如果再调用了pthread_mutex_lock,则整个函数以致于上层软件体系都受到了影响。代码如下:

int err = pthread_mutex_trylock(&mtx);//返回0表示锁定成功,
		if(0 != err) {
			if(EBUSY == err) {
				//The mutex could not be acquired because it was already locked.错误是EBUSY表示没办法锁定,其它线程占用了互斥体
				return false;
			}
		}
		//pthread_mutex_lock(&mtx);这行要注释掉,正因为有了它才导致问题。

std::mutex也试下,kaldi里也用了这个,标准库里的互斥应该好用,但用了还是和pthread_mutex_trylock同样的问题,我把上面注释行注释了,功能正常,也就没查std::mutex的问题。

编译pthread要带上lpthread。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内