我在多线程环境中使用了2个函数。
static std::vector<MyType> shared_resource;
void funcA(){
// remove/add object to shared_resource
}
void funcB(){
// Use shared_resource (but never changes it)
}
我必须同步2个函数,这样当funcA在共享资源上运行时,funcB会等待它。一个明显的解决方案是使用临界区,但如果我使用它,函数调用funcB也是序列化的,这是我不想要的。 我的意思是我想允许多个线程同时执行funcB但是一旦从另一个线程调用funcA,所有进入funcB的线程都被阻塞,并且在执行funcB退出的所有线程之后,funcA上的线程被恢复并执行它
我不知道我的解释是否清楚,所以我写了一个例子。假设我们有线程T1到T5。这是预期的行为。
我应该用什么来实现这种行为?信号?我正在Windows / C ++环境中实现它。