gpt4 book ai didi

c++ - 在 scoped_lock 上进行额外的解锁调用

转载 作者:太空狗 更新时间:2023-10-29 23:33:43 25 4
gpt4 key购买 nike

在下面的博文中:

http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html

有一个'push'方法定义如下:

void push(Data const& data)
{
boost::mutex::scoped_lock lock(the_mutex);
the_queue.push(data);
lock.unlock();
the_condition_variable.notify_one();
}

我的问题是:

  1. 为什么要对 scoped_lock 变量调用显式“lock.unlock()”?

  2. 它的目的是什么?

  3. 是否可以安全地删除它,从而使“notify_one”方法调用在 scoped_mutex 的范围内?

最佳答案

不需要解锁。但是,它可能会稍微减少互斥锁的锁定时间。

保留或移除它不会影响线程安全或导致死锁。

编辑:然而,正如文章所提到的,将解锁保留在那里可以减少对互斥体的争用。您不妨保留它。或者,使用互斥体周围的范围,我个人认为如果看一眼代码,它可以更好地突出互斥体的范围。

关于c++ - 在 scoped_lock 上进行额外的解锁调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10698022/

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