线程和同步

pthread and synchronization

本文关键字:同步 线程      更新时间:2023-10-16

我有一个关于多线程同步的问题。假设我们有两个线程和一个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);
}

线程2将有这样的生命周期:

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

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

没有死锁。

pthread_cond_wait()隐式释放互斥锁

但是,您可以将pthread_mutex_unlock()移动到pthread_cond_signal()之前调用