後,我想實現一個併發隊列,和實施的骨架如下:差在調用pthread_mutex_unlock
struct queue
{
int try_pop()
{
pthread_mutex_lock(&mutex_);
int rt;
while((rt = do_pop()) == -1)
{
pthread_cond_wait(&cond_,&mutex_);
}
pthread_mutex_unlock(&mutex_);
return rt;
}
bool push(int num)
{
pthread_mutex_lock(&mutex_);
push_impl(num);
#if 0
/*signal before unlock*/
pthread_cond_signal(&cond_);
pthread_mutex_unlock(&mutex_);
#else
/*signal after unlock*/
pthread_mutex_unlock(&mutex_);
pthread_cond_signal(&cond_);
#endif
return true;
}
// private function and data member
}
我之前或解鎖mutex
後打電話pthread_cond_signal
。
我的問題是兩種方法的淨效應有什麼區別?
關於此手冊頁中有一段:https://linux.die.net/man/3/pthread_cond_signal – mch
這可能是相關的:http://stackoverflow.com/questions/4544234/calling- pthread-cond-signal-without-locking-mutex/4544494,但是OTOH,當你改變共享狀態時你確實持有互斥量,所以也許在你的情況下在_signal之前解鎖互斥量是可以的。 –