pthread_mutex_trylock的问题及解决

时间:2022-01-13 18:19:23

在需要使用非阻塞的锁时,trylock是一个比较好的选择,但是使用的时候碰见了一些问题:

需要使用PTHREAD_MUTEX_ERRORCHECK_NP来定义一个检错锁,但是不管如何都编译不过。即使在编译的时候加入-D_GNU_SOURCE也一样会提示没有定义。迫于无奈,采用了麻烦一些的初始化方式:

            pthread_mutexattr_t ma; 
pthread_mutexattr_init(&ma);
pthread_mutexattr_settype(&ma,PTHREAD_MUTEX_ERRORCHECK);
pthread_mutex_init(&_ctr_data_lock, &ma);
pthread_mutexattr_destroy(&ma);

pthread_mutex_trylock的使用还是比较简单(希望使用没错。。。),简单的应用如下:

ret = pthread_mutex_trylock(p_ctr_data_lock);
if (0 == ret) {
//the lock isnt used
//如果被锁定
...
pthread_mutex_unlock(p_ctr_data_lock);
} else if(EBUSY == ret){
//锁正在被使用;
...
}