gpt4 book ai didi

c++ - 关于C++中的条件变量

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:40 26 4
gpt4 key购买 nike

我正在阅读以下位置的条件变量文章

http://software.intel.com/en-us/blogs/2010/10/01/condition-variable-support-in-intel-threading-building-blocks/

Here we have following code as example

#include "tbb/compat/condition_variable"
using namespace std;
condition_variable my_condition;
tbb::mutex my_mtx;
bool present = false;

void producer() {
unique_lock<tbb::mutex> ul( my_mtx );
present = true;
my_condition.notify_one();
}

void consumer() {
while( !present ) {
unique_lock<tbb::mutex> ul( my_mtx );
my_condition.wait( ul );
}
}

我的理解是我们使用条件变量来等待一个事件。我有以下问题

  1. 为什么我们在使用条件时在这里使用互斥锁变量?
  2. 在 while 循环中的 consumer() 函数中,我们使用互斥量和 等待条件,生产者函数如何锁定互斥锁如果消费者已经拿走了它,它如何通知它这不是一个僵局?
  3. unique_lock 与 scoped_lock 有何不同?

感谢您帮助澄清我的问题。

最佳答案

Why are we using mutex here while we are using condition variable?

条件变量的基础知识需要锁才能正常工作。
只有拥有锁的线程应该尝试更改条件变量的状态(即通过调用条件变量函数之一(这也是为了保护您真正正在处理的对象))。

In consumer() function in while loop we are taking mutex and waiting on condition, how can producer function can lock mutex if consumer already taken it

当您在条件变量上调用 wait() 时,线程将进入休眠状态并释放互斥锁。当线程被唤醒时,它必须在函数 wait() 返回到用户代码之前重新获取锁。

and how can it notify it doesn't it a deadlock?

它不会死锁,因为 wait() 会在线程进入休眠状态之前释放锁。

How unique_lock is different from scoped_lock?

在这方面没有。但是,如果您对这些有任何具体的实现,请具体说明实现,我们可以进行更详细的讨论。

关于c++ - 关于C++中的条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6894388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com