【发布时间】:2013-06-19 16:57:00
【问题描述】:
我有一个关于多线程同步的问题。 我们假设我们有 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);
}
这段代码会导致死锁的情况吗? 在等待之前,我必须解锁互斥锁吗?
【问题讨论】:
-
没关系,但是你需要使用
while而不是if来检查谓词(见stackoverflow.com/q/6206350/768469)
标签: c++ pthreads signals mutex deadlock