如何在 if-else 阶梯中针对特定条件放置互斥锁和解锁?

How to put mutex lock & unlock for a specific condition in if-else ladder?

本文关键字:解锁 特定条件 if-else      更新时间:2023-10-16

在线程中运行的类的成员函数中,我希望在类似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) {
...
}