锁定由不同线程执行的多个函数

时间:2014-09-25 04:48:13

标签: c++ multithreading

我有两个功能,Funct1Funct2。他们都在内部打电话Funct3Funct 1和Funct2由2个不同的线程调用。

我想要的是,当Funct1正在进行Thread1时,Func2不应调用Thread2,或Funct3基本不应调用Funct1两个线程同时调用。

如果我在Funct2Funct1中使用互斥锁,并且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}}

1 个答案:

答案 0 :(得分:0)

如果Func1()可以从多个线程调用并且并行运行,因为Func2没有运行,而Func2()只能在没有运行Func1()的情况下运行,那么你可能需要一个共享锁。 Func1应该在运行之前获取共享锁,而Func2应该在运行之前获得独占锁。这是经典的许多读者,一个作家的问题。