线程调用pthread_cond_timedwait
之后,它返回ETIMEDOUT
,该线程是否拥有该互斥锁?pthread_cond_timedwait超时后线程是否拥有互斥锁?
我最初会觉得没什么,但现在看来,我们必须电话返回ETIMEDOUT
pthread_mutex_unlock
甚至pthread_cond_timedwait
后。
在成功返回时,互斥量应已被锁定,并由调用线程拥有。
因此,在非成功返回(返回值!= 0)时,我认为互斥量不是拥有的。
但是,如果我们不在ETIMEDOUT
之后调用pthread_mutex_unlock
,互斥似乎处于中断状态(即我无法获得另一个线程来获取它,它只是停顿)。
的文件也是在这个暗示为好,因为他们总是无论解开pthread_cond_timedwait
返回值的互斥:
(void) pthread_mutex_lock(&t.mn);
t.waiters++;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 5;
rc = 0;
while (! mypredicate(&t) && rc == 0)
rc = pthread_cond_timedwait(&t.cond, &t.mn, &ts);
t.waiters--;
if (rc == 0) setmystate(&t);
(void) pthread_mutex_unlock(&t.mn);
那么,这是否线程总是获得互斥pthread_cond_timedwait
后?它没有什么意义,因为呼叫将不得不阻止超过特定时间才能再次获取互斥量。