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。这是预期的行为
我应该使用什么来实现这种行为?信号灯?我正在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)
}