pthread和同步

时间:2013-06-19 16:57:00

标签: c++ pthreads signals mutex deadlock

我有关于多线程同步的问题。 我们假设我们有2个pthread和一个fifo队列。 线程1将在此队列中插入元素,线程2将从同一队列中提取这些元素。 我实现了队列的两个操作:push和pop。

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);

}

然后,thread2将具有此生命周期:

while(myBoolFlag) {
    Element theElement = myQueue->pop();
usleep(500000);

}

这段代码会导致死锁情况吗? 在等待之前,我必须解锁互斥锁吗?

1 个答案:

答案 0 :(得分:0)

没有死锁可见。

pthread_cond_wait()隐式释放互斥锁。

但是,您可以在pthread_mutex_unlock()之前移动pthread_cond_signal()