C++ 2个函数中的不同条件锁

C++ 2个函数中的不同条件锁,c++,windows,multithreading,C++,Windows,Multithreading,我有两个用于多线程环境的函数 static std::vector<MyType> shared_resource; void funcA(){ // remove/add object to shared_resource } void funcB(){ // Use shared_resource (but never changes it) } 静态std::向量共享资源; void funcA(){ //将对象删除/添加到共享资源 } void funcB

我有两个用于多线程环境的函数

static std::vector<MyType> shared_resource;
void funcA(){
    // remove/add object to shared_resource
}

void funcB(){
    // Use shared_resource (but never changes it)
}
静态std::向量共享资源;
void funcA(){
//将对象删除/添加到共享资源
}
void funcB(){
//使用共享资源(但决不更改)
}
我必须同步两个函数,这样当funcA在共享资源上运行时,funcB会等待它。一个明显的解决方案是使用临界区,但若我使用它,对funcB的函数调用也是序列化的,这是我不想要的。 我的意思是,我想允许多个线程同时执行funcB,但一旦从另一个线程调用funcA,进入funcB的所有线程都将被阻塞,在所有执行funcB的线程退出后,funcA处的线程将恢复并执行它

我不知道我的解释是否清楚,所以我写了一个例子。假设我们有线程T1到T5。这是预期的行为

  • T1和T2进入funcB并同时执行funcB
  • T3进入funcA,等待T1和T2退出funcB
  • T4正在进入funcB,但由于T3正在等待执行funcA,T4在执行funcB时被阻止
  • T1和T2退出后,T3执行funcA
  • T5正在进入funcB,但由于funcA仍在执行,因此被阻止
  • T3退出funcA后,T4和T5同时执行funcB

  • 我应该使用什么来实现这种行为?信号灯?我正在Windows/C++环境中实现它。

    您应该使用所谓的读写器锁。您可以找到一个使用pthreads的简单实现。

    您应该使用所谓的readers-writer锁。您可以找到一个使用pthreads的简单实现。

    谢谢,这就是我想知道的!谢谢,这就是我想知道的!
    static std::vector<MyType> shared_resource;
    void funcA(){
        // remove/add object to shared_resource
    }
    
    void funcB(){
        // Use shared_resource (but never changes it)
    }