如果其他人在等待,是否有标准的STL或QT方法可以产生互惠码,否则请保留它
Is there a standard STL or Qt way to yield a mutex if someone else is waiting, otherwise keep it?
在我的工作线程中,最方便的外循环逻辑将为
lock (mutex_foo);
while (not done)
{
do_some_work ();
if (someone_is_waiting_for (mutex_foo))
{
unlock (mutex_foo);
wait_until_someone_else_locks (mutex_foo);
// expect this lock to already be taken,
// this thread will now wait its turn
lock (mutex_foo);
}
}
unlock (mutex_foo);
主线程将
while (not_done)
{
do_stuff ();
lock (mutex_foo); // this will interrupt the worker thread's main loop
use_shared_resource ();
unlock (mutex_foo);
}
我使用C 11和QT 5.我应该如何实现?
超级建议使用std :: atomic_int<>可能有效,但我认为您可能会在这里思考过多 - 更简单,更易于验证的工作方法将使您的工作线程将是:
while(not done)
{
lock_mutex();
do_some_work();
unlock_mutex();
}
这将允许其他线程在当前拨打DO_SOME_WORK((的呼叫后立即获得Mutex的所有权。
。如果您担心这会引入额外的锁定和解锁静音,请不要 - 如今,静音非常优化,而且他们的lock_mutex((和unlock_mutex((操作不太可能更多比您的check_if_someone_is_waiting((功能昂贵。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 从浮点数中删除小数部分但保留类型的有效方法
- 保留计时器集合(对象与指针)的最佳方法
- 在 push_back() 之前保留非空 std::vector 的正确方法
- 如果其他人在等待,是否有标准的STL或QT方法可以产生互惠码,否则请保留它
- 为什么 std::unordered_map 有保留方法?
- 保留动态分配的数组而不为删除而烦恼的最佳方法
- 是否可以在不声明其方法的情况下保留裸类定义?
- 有没有一种方便的方法可以从属性树中删除节点,同时保留其子节点
- 在visual studio C++中,有没有任何方法可以在运行时增加堆栈保留大小
- 有没有一种方法可以保留C++中以前递归的数据(具体示例)
- JNI保留对对象的全局引用,并使用其他JNI方法访问它.在多个JNI调用中保持C++对象的活动状态
- 开发简单GUI的最佳方法,同时保留本机C++的功能
- 向量保留( )方法的行为
- 在main中调用类方法,更改不会在类方法之外保留?
- 在不同的文件上有C++类的任何方法都可以将方法定义保留在类中