线程和同步
pthread and synchronization
我有一个关于多线程同步的问题。假设我们有两个线程和一个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()
之前调用
相关文章:
- 在C++中同步线程
- 将 10 个线程与原子布尔值同步
- 线程过程中的线程同步问题
- 如何定期同步线程?
- 同步线程安全的API,用于暴露缓存数据
- 如何在 pthreads 中正确同步线程
- 通过shared_ptr同步:线程清理器误报
- 如何同步线程以捕获相同数量的帧
- 同步线程和信号
- 使用条件变量(监视器)同步线程
- 同步线程创建和销毁(静态)对象
- NVIDA的CUDA"__syncthreads()"在传统C++中的等价物是什么。如何专业地同步线程?
- 使用事件同步线程
- 如何同步线程(消费者/生产者)
- 以最优雅的方式同步线程
- 使用互斥锁同步线程
- 计算着色器-如何全局同步线程
- GPU for loops:避免扭曲发散和隐式同步线程
- 如果已知访问顺序是安全的,如何在没有互斥锁的情况下同步线程/CPU
- Qt - 同步线程不起作用 - 线程停止但实际上不会停止,有时在不应该停止的时候停止