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

C++ 锁定由不同线程执行的多个函数,c++,multithreading,C++,Multithreading,我有两个函数,Funct1和Funct2。他们都在内部调用Funct3。Funct1和Funct2由两个不同的线程调用 我想要的是,当Funct1由Thread1进行时,那么Func2不应该由Thread2调用,或者基本上Funct3不应该由两个线程同时调用 如果我在Funct1和Funct2中都使用互斥体,并且Funct1的执行开始,那么这个互斥体会禁止Funct2启动吗 在这种情况下应该怎么做?以下是示例代码: class A { boost::mutex mtx; public:

我有两个函数,Funct1和Funct2。他们都在内部调用Funct3。Funct1和Funct2由两个不同的线程调用

我想要的是,当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
       }
  };

如果可以从多个线程调用Func1,并在Func2未运行时自由并行运行,并且Func2只能在没有Func1未运行时运行,则可能需要共享锁。
Func1应在运行前获得共享锁,Func2应在运行前获得独占锁。这是典型的多读多写问题。

只有当多个线程执行所访问的代码块时,互斥才有意义。在您的例子中,Func3似乎是两个线程执行的唯一位置。为什么不在Func3中插入锁呢?不,Func1也由10个线程执行,而Func2在另一个线程中运行。