- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在哪些情况下会出现 std::timed_mutex优于常规互斥体?
我能想到的唯一用例是(IMO hackish)防止死锁的方法。
在哪些其他情况下 std::timed_mutex
是一个不错的选择?
最佳答案
这是 Windows 上的常见设计实践,您可以使用 WaitForSingleObject
或 WaitForMultipleObjects
和超时值,指定等待失败的时间。
它不用于解决死锁(这真的无济于事,糟糕的线程代码就是糟糕的线程代码)。
请记住,在 Windows Vista 发布之前,Windows 没有 Posix 条件变量的等价物,这是一种完全不同的多线程编码范例,它起到了一定的作用,但并不是定时互斥锁存在的唯一原因.
您不会在基本示例中看到定时等待的使用,但在复杂的架构中您会经常遇到它。您会使用互斥锁的一个例子通常是某种生产者-消费者架构,在这种架构中,客户端必须每 x 秒做一些事情,并且可能以事件的形式出现“中断”被触发。一个简单的伪代码示例:
//This code will run indefinitely, printing the value of
//the variable x every 1 second until an interrupt is received
while(timed_wait(end_mutex, 1 second) != success)
print(x)
是的,这段代码可以重写如下:
while(true){
sleep(1 second)
wait(mutex)
done = globalDone
unlock(mutex)
if(done) break
else print(x)
}
但前面的示例更清晰且响应更快,因为它不是 sleep (即,只要互斥体可用,它就会停止)。
请注意,Linux 具有不属于 Posix 标准一部分的附加功能,用于对互斥体执行定时等待(pthread_mutex_timedlock
,但我认为它现在在 posix 规范中)。 OS X 和 BSD 上的 sysv 信号量也是如此。如果您足够聪明,只在适当的时候使用它,那么它是一个有用的工具。
关于c++ - `std::timed_mutex` 的有效用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256394/
我的文件 test8.cpp是 #include #include #include std::mutex mutex; std::timed_mutex timed_mutex; 当我编译这段代码时
我第一次使用 timed_mutex。到目前为止,它对我来说只是 lock_guard。 但似乎只有第一个try_lock_for真正成功了。除了第一个 try_lock_for 之外的所有内容都返回
在哪些情况下会出现 std::timed_mutex优于常规互斥体? 我能想到的唯一用例是(IMO hackish)防止死锁的方法。 在哪些其他情况下 std::timed_mutex 是一个不错的选
我有一个问题。我想为我的程序使用互斥体。所以会发生什么:我正在构造一个包含 std::timed_mutex 的对象。创建时,此对象会锁定互斥量,因为稍后应将其解锁。创建互斥锁的同一线程现在应该等待该
我第一次使用 std::timed_mutex,它的行为与我预期的不同。它似乎立即失败,而不是等待互斥锁。我以毫秒为单位提供锁定超时(如此处所示 http://www.cplusplus.com/re
try_lock* 是指 try_lock()、try_lock_for() 和 try_lock_until()。根据cppreference ,这三种方法都可能会虚假地失败。以下引用自 try_l
我正在尝试同时使用 timed_mutex 和 scoped_lock。我之前通过一些示例成功地使用了 scoped_lock,但现在我似乎找不到解决方法,我也无法正确理解 boost 文档。 期望的
我在 Ubuntu 12.04 中使用 gcc-4.8.1(configure: ./configure --prefix=/usr/local) 编译了以下代码,但是当我运行它时,它没有工作。它没有
根据 Boost 文档,boost::mutex 和 boost::timed_mutex 应该是不同的。第一个实现了 Lockable Concept,第二个实现了 TimedLockable Co
我需要通过互斥来保护资源。为了改进诊断,我正在考虑使用 timed_mutex 进行死锁警告(代码未测试): boost::timed_mutex m; // first thread accessi
这可能吗?我想使用 timed_mutex 而不是带有 condition_variable 的常规互斥锁,但它不会编译并查看源代码 void wait(unique_lock& __lock
我想知道这两者之间的区别是什么 boost::timed_mutex _mutex; if(_mutex.timed_lock(boost::get_system_time() + boost::po
我是一名优秀的程序员,十分优秀!