我有一個關於多線程同步的問題.. 我們假設我們有2個pthread和一個fifo隊列。 線程1將在此隊列中插入元素,線程2將從同一隊列中提取這些元素。 我實現了我的隊列的兩個操作:push和pop。然後pthread和同步
void push(element e) {
pthread_mutex_lock(&mutex);
myVector.push_back(e);
pthread_cond_signal(&empty);
pthread_mutex_unlock(&mutex);
}
Element pop() {
pthread_mutex_lock(&mutex);
if(myVector.size() == 0)
pthread_cond_wait(&empty, &mutex);
//extract the element from the queue;
pthread_mutex_unlock(&mutex);
}
的線程2將有這樣的生命週期:
while(myBoolFlag) {
Element theElement = myQueue->pop();
usleep(500000);
}
這個代碼可以導致死鎖的情況呢? 等待之前,我必須解鎖互斥鎖嗎?
這很好,但是您需要使用'while'而不是'if'來檢查謂詞(請參閱http://stackoverflow.com/q/6206350/768469) – Nemo