在需要使用非阻塞的锁时,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){
//锁正在被使用;
...
}
本文介绍了在使用非阻塞锁时遇到的问题及解决方法。针对PTHREAD_MUTEX_ERRORCHECK_NP无法定义的情况,采用了一种较为复杂的初始化方式。此外,还展示了pthread_mutex_trylock的简单使用示例。

822

被折叠的 条评论
为什么被折叠?



