我有两个功能,Funct1
和Funct2
。他们都在内部打电话Funct3
。 Funct
1和Funct2
由2个不同的线程调用。
我想要的是,当Funct1
正在进行Thread1
时,Func2
不应调用Thread2
,或Funct3
基本不应调用Funct1
两个线程同时调用。
如果我在Funct2
和Funct1
中使用互斥锁,并且Funct2
的执行开始,那么这个互斥锁是否会禁止class A
{
boost::mutex mtx;
public:
void Func1()
{
boost::mutex::scoped_lock lock(this->mtx);
/* -------- */
Func3();
}
void Func2()
{
boost::mutex::scoped_lock lock(this->mtx);
/* --------- */
Func3();
}
void Func3()
{
//do something
}
};
启动?
在这种情况下该怎么办?以下是示例代码:
{{1}}
答案 0 :(得分:0)
如果Func1()可以从多个线程调用并且并行运行,因为Func2没有运行,而Func2()只能在没有运行Func1()的情况下运行,那么你可能需要一个共享锁。 Func1应该在运行之前获取共享锁,而Func2应该在运行之前获得独占锁。这是经典的许多读者,一个作家的问题。