線程調用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
後?它沒有什麼意義,因爲呼叫將不得不阻止超過特定時間才能再次獲取互斥量。