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