0
================線程1如果調用pthread_cond_wait能損失信號時調用pthread_cond_signal信號之前
pthread_mutex_lock(&mutex);
do
{
fun();//this fun will cost a long time, maybe 1-2 second
gettimeofday(&now, NULL);
outtime.tv_sec = now.tv_sec + 5;
outtime.tv_nsec = now.tv_usec * 1000;
int ret = pthread_cond_timedwait(&cond, &mutex, &outtime);
} while((!predicate && ret != ETIMEDOUT)
pthread_mutex_unlock(&mutex);
============= =============線程2
pthread_mutex_lock(&mutex);
predicate = true;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
如果線程2線程1的樂趣(在發出一個信號),沒有那麼pthread_cond_timedwait,當樂趣()調用返回時,線程1的phread_cond_timedwait仍然可以獲取thread2之前發送的信號還是不?我們可以在while()中的pthread_cond_timedwait之前調用一個耗時的樂趣嗎?
感謝pete becker,你如何看待我在循環中調用的fun(),我認爲這是錯誤的,不應該調用任何耗費時間的函數。但是我做了一個測試程序,信號可以通過pthread_cond_wait接收,即使信號在沒有pthread_cond_wait時發送,但我不確定它是否可以一直接收。 –