gpt4 book ai didi

c++ - 在消费者循环中重用 unique_lock

转载 作者:可可西里 更新时间:2023-11-01 18:29:06 28 4
gpt4 key购买 nike

我在 Bjarne Stroustrup 的“C++ 编程语言,第 4 版”第 119 页中无意中发现了以下代码:

queue<Message> mqueue;
condition_variable mcond;
mutex mmutex;

void consumer()
{
while(true) {
unique_lock<mutex> lck{mmutex};
mcond.wait(lck);

auto m = mqueue.front();
mqueue.pop();
lck.unlock();
// process m
}
}

还有一个生产者线程将Message插入队列,循环通知等待线程。

我的问题是:是否需要在循环的每次迭代中创建一个新的unique_lock?这对我来说似乎是不必要的,因为在下一行 mcond.wait(lck) 中,锁在前一行锁定后直接解锁。

从性能的角度来看,lck 变量不能在循环开始之前初始化吗?

最佳答案

如前所述on cppreferencestd::unique_lock 构造函数是这样的:

explicit unique_lock( mutex_type& m );

构造函数将执行以下操作:

Constructs a unique_lock with m as the associated mutex. Additionally locks the associated mutex by calling m.lock(). The behavior is undefined if the current thread already owns the mutex except when the mutex is recursive.

所以代码在每次迭代时都会锁定互斥量。将其移出循环会改变逻辑。

关于c++ - 在消费者循环中重用 unique_lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45415874/

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