pthread_mutex_trylock的问题及解决

在需要使用非阻塞的锁时,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){ 
    //锁正在被使用;
    ... 
}


你可能感兴趣的:(POSIX线程学习)