スレッドがpthread_cond_timedwait
を呼び出した後にETIMEDOUT
を返した場合、スレッドはそのスレッドを所有していますか?pthread_cond_timedwaitがタイムアウトした後にスレッドがmutexを所有していますか?
私は、最初はNOだと思うだろうが、それもpthread_cond_timedwait
戻っETIMEDOUT
後に我々必見コールpthread_mutex_unlock
ことが表示されます。
documentationは言う:正常終了時に
、ミューテックスがロックされているものとし、呼び出し元のスレッドが所有するものとします。
戻り値(戻り値!= 0)が返されなかった場合、ミューテックスは所有されていないと考えられます。
ETIMEDOUT
の後にpthread_mutex_unlock
を呼び出さないと、mutexが壊れているように見えます(つまり、別のスレッドで取得できなくなってしまいます)。
文書はまた、彼らは常にかかわらず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
後にmutexを獲得しますか?ミューテックスを再度取得するためには、コールが指定された時間以上ブロックする必要があるため、実際には意味をなさない。