如何检查是否未获取互斥锁?

sat*_*j k 4 c mutex pthreads

我想检查互斥锁是否空闲且未获取.

我试着用 pthread_mutex_trylock(mutex_object);

但是,0如果获取了互斥锁,则返回-1错误.

如果没有获得互斥锁怎么办?它会为它返回任何值吗?

R..*_*R.. 12

pthread_mutex_trylock不返回"-1表示错误".它从可能的值中返回"错误"代码errno.h.其中之一EBUSY,意味着另一个线程已拥有锁.pthread_mutex_trylock除非您的程序中存在严重错误,否则不应发现任何其他错误代码.

请注意,对于递归互斥锁,返回值0不区分互斥锁先前已解锁的情况和调用线程已拥有它的情况.在任何情况下,如果pthread_mutex_trylock返回0,则您负责解锁它,pthread_mutex_unlock因为您成功后将成为所有者(或者,在递归的情况下,您的锁定数增加1)pthread_mutex_trylock.


doh*_*shi 6

pthread_mutex_trylock获取调用线程的互斥锁,EBUSY如果互斥锁当前已锁定则返回.这是测试互斥锁是否被锁定的唯一有意义的方法.在多线程环境中,仅检查"是其他人持有此互斥锁"的函数是无用的,因为在函数返回后立即另一个线程可以获取互斥锁.