如何在 if-else 阶梯中针对特定条件放置互斥锁和解锁?
How to put mutex lock & unlock for a specific condition in if-else ladder?
在线程中运行的类的成员函数中,我希望在类似if-else的梯形图中保护对某些共享资源的访问。
if (condition)
{}
// the mutex lock should be here
else if (specific condition)
// the mutex unlock should be here
{}
else ...
我希望以上述方式进行锁定,因为除了访问用于评估specific condition
的共享资源外,我不会在任何地方访问/使用它,并且每个if/else块运行的所有操作都运行得很长,我不想阻止其他线程访问该共享资源。
我知道作用域锁和互斥锁,但我想不出在这种情况下使用它的方法。问题是:
使用互斥锁/解锁语句,甚至使用作用域锁,如何在if-else梯形图中实现特定条件下的锁定/解锁
此外,我希望从C++(也许是03)的角度找到这个解决方案(或者不是从像Java这样具有隐式互斥支持和同步块的语言)。提前感谢您的帮助。
在执行锁定的函数中封装条件:
bool condition() {
mutex_lock();
bool result = ...
mutex_unlock();
return result;
}
那么在代码中只使用
if () {
...
} else if (condition(...)) {
...
}
这应该是工作。
if (std::lock_guard{mutex_}, condition) {
...
}
相关文章:
- 我应该在锁定TBitmap画布后解锁它吗
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- c++ 为什么我不应该从不同的线程解锁互斥锁
- 如何在具有特定条件的向量中删除所有元组?
- 在新作用域中使用unique_lock是否等效于在使用共享资源的工作结束时解锁调用
- 根据特定条件从文件中检索每个令牌
- 使用互斥锁和条件变量作为成员时如何修复"use of deleted function"?
- C++ 多线程中的锁和条件变量问题
- 仅为特定条件重置变量的值,并为其他所有条件重置固定值
- "data race"(不是真的)在通知条件变量并解锁关联的互斥锁后
- 使用互斥锁和条件变量增强跨内存的进程间共享向量
- 程序输入密码并解锁窗口7,8,10
- 在通知之前完成手动解锁
- 您可以static_assert一个元组只有一种满足特定条件的类型
- 在矢量中使用特定条件检查唯一元素
- STD :: Mutex如何在不同的线程中解锁
- 如何使用单个解锁方法(可称为读取器或写入器)实现C++读写器锁?
- 如何在C 中自动汇总日志消息并自动解锁互斥X
- 如果我们已经手动解锁了unique_lock,那么破坏时会解锁吗?
- 如何在 if-else 阶梯中针对特定条件放置互斥锁和解锁?