gpt4 book ai didi

c++ - mutex.timed_lock(duration) 和 boost::timed_mutex::scoped_lock 之间的区别 scoped_lock(mutex, duration)

转载 作者:太空宇宙 更新时间:2023-11-04 11:32:23 27 4
gpt4 key购买 nike

我想知道这两者之间的区别是什么

boost::timed_mutex _mutex;
if(_mutex.timed_lock(boost::get_system_time() + boost::posix_time::milliseconds(10))){
exclusive code
_mutex.unlock();
}

boost::timed_mutex _mutex;
boost::timed_mutex::scoped_lock scoped_lock(_mutex, boost::get_system_time() + boost::posix_time::milliseconds(10));
if(scoped_lock.owns_lock()) {
exclusive code
}

我已经知道 scoped_lock 使解锁调用变得不必要了。我的问题是指:

  1. 为什么在第一种情况下我们调用 timed_lock 作为 a 的成员函数互斥体,在第二个中,我们从互斥体和一个期间。
  2. 哪个更有效率?
  3. boost::posix_time的用法还可以或者建议换一种,例如时间还是持续时间?
  4. 有更好(更快)的方法来尝试获取锁的时间比上面指定的两种方法“x”时间?

最佳答案

我会尽量回答你的问题:

  1. 正如您在本 Document 中所读到的那样, 锁被用作互斥体锁定状态的 RAII 设备。也就是说,锁不拥有它们引用的互斥量。他们只是拥有互斥体上的锁。基本上它的意思是当你初始化它对应的锁时你获得互斥锁并在锁对象被销毁时释放它。
    这就是为什么在第二个示例中您不必从互斥体调用 timed_lock,scoped_lock 在初始化时为您完成。
  2. 我不知道第一个例子是否更有效率,但我确信第二个例子(RAII scoped_lock)更安全,它保证你不会忘记解锁互斥体,更重要的是,它保证其他人使用和修改您的代码不会导致任何与互斥锁相关的问题。
  3. 据我所知,您不能从 posix_time 构造 scoped_lock(基本上是 unique_lock<timed_mutex>)。我个人更喜欢持续时间。
  4. 在我看来,使用 Duration 绝对时间构造锁是您的最佳选择。

关于c++ - mutex.timed_lock(duration) 和 boost::timed_mutex::scoped_lock 之间的区别 scoped_lock(mutex, duration),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24241558/

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