pthread_mutex_trylock

函数原型:

        int pthread_mutex_trylock(pthread_mutex_t *mutex);include
        pthread_mutex_t mutex;
        int ret;
        ret = pthread_mutex_trylock(&mutex); /* try to lock the mutex */

      pthread_mutex_trylock() 是 pthread_mutex_lock() 的非阻塞版本。如果 mutex 所引用的互斥对象当前被任何线程(包括当前线程)锁定,则将立即返回该调用。否则,该互斥锁将处于锁定状态,调用线程是其属主。

返回值

pthread_mutex_trylock() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。如果出现以下任一情况,该函数将失败并返回对应的值。

EBUSY
        描述:由于 mutex 所指向的互斥锁已锁定,因此无法获取该互斥锁。 EAGAIN
        描述:由于已超出了 mutex 的递归锁定最大次数,因此无法获取该互斥锁。如果定义了  _POSIX_THREAD_PRIO_INHERIT 符号,则会使用协议属性值  PTHREAD_PRIO_INHERIT 对互斥锁进行初始化。此外,如果 pthread_mutexattr_setrobust_np()  的 robustness 参数是  PTHREAD_MUTEX_ROBUST_NP,则该函数将失败并返回以下值之一:

EOWNERDEAD

        描述:该互斥锁的最后一个属主在持有该互斥锁时失败。该互斥锁现在由调用方拥有。调用方必须尝试使该互斥锁所保护的状态一致。如果调用方能够使状态保持一致,请针对该互斥锁调用  pthread_mutex_consistent_np()  并解除锁定该互斥锁。以后对 pthread_mutex_lock()  的调用都将正常进行。如果调用方无法使状态保持一致,请勿针对该互斥锁调用  pthread_mutex_init() ,而要解除锁定该互斥锁。以后调用 pthread_mutex_trylock()  时将无法获取该互斥锁,并且将返回错误代码 ENOTRECOVERABLE。如果已获取该锁的属主失败并返回 EOWNERDEAD,则下一个属主获取该锁时返回 EOWNERDEAD。 ENOTRECOVERABLE
        描述:尝试获取的互斥锁正在保护某个状态,此状态由于该互斥锁以前的属主在持有该锁时失败而导致不可恢复。尚未获取该互斥锁。 以下条件下可能会出现此情况: ENOMEM
        描述:已经超出了可同时持有的互斥锁数目的限制。




你可能感兴趣的:(linux,C编程)