我想检查互斥锁是否空闲并且不被获取。如何检查是否没有获取互斥锁?
我试图用pthread_mutex_trylock(mutex_object);
但是,如果返回互斥量被收购了0
和-1
错误。
如果没有获取互斥量,该怎么办?它会为它返回任何价值吗?
我想检查互斥锁是否空闲并且不被获取。如何检查是否没有获取互斥锁?
我试图用pthread_mutex_trylock(mutex_object);
但是,如果返回互斥量被收购了0
和-1
错误。
如果没有获取互斥量,该怎么办?它会为它返回任何价值吗?
pthread_mutex_trylock
不返回“-1表示错误”。它从errno.h
中的可能值返回一个“错误”代码。其中之一EBUSY
意味着另一个线程已经拥有该锁。除非程序中存在严重的错误,否则您不应该观察pthread_mutex_trylock
中的任何其他错误代码。
请注意,对于递归互斥锁,返回值0不区分互斥锁先前已解锁的情况和调用线程已拥有它的情况。在任何情况下,如果pthread_mutex_trylock
返回0,那么在您成为pthread_mutex_trylock
后您成为所有者(或者,在递归情况下,锁计数增加1),您将负责通过pthread_mutex_unlock
解锁。
pthread_mutex_trylock
获取调用线程的互斥锁或返回EBUSY
如果互斥锁当前被锁定。这是测试互斥锁是否被锁定的唯一有意义的方法。在多线程环境中,只检查“是否有其他人持有该互斥锁”的函数是无用的,因为函数立即返回另一个线程可以获取互斥锁。
您通常使用pthread_mutex_lock,trylock是一个更深奥的非阻塞变体,用于避免优先级反转场景中的死锁。如果你获得0回报,互斥量是免费的,现在被你锁定。