class Widget{
public:
void funA();
void funnB();
private:
std::mutex mutex;
};
void Widget::funA(){
{
std::unique_lock(mutex);
//operate A;
}
}
void Widget::funB(){
{
std::unique_lock(mutex);
//operate B;
}
}
然后设计两个函数来封装这两个成员函数,类似
void execA(Widget* w){
w->funcA();
};
最后程序里,生成一个 Widget 的对象,需要在两个线程里执行这两个函数,即
Widget* w{};
std::jthread threadA(execA, &w); //在一个线程里执行 A 函数
std::jthread threadB(execB, &w); //在另一个线程里执行 B 函数
在这种情况下,大多数式成员函数 funcA()先执行,但多次尝试后,有几次式 funcB()先获得 mutex 。
在下列三个前置条件下
[ol]
[/ol]
我向问下,有没有办法确保 A 一定在 B 之前获得 mutex ?