【发布时间】:2023-12-26 11:38:01
【问题描述】:
我有一个关于线程安全和互斥锁的问题。我有两个函数可能不会同时执行,因为这可能会导致问题:
std::mutex mutex;
void A() {
std::lock_guard<std::mutex> lock(mutex);
//do something (should't be done while function B is executing)
}
T B() {
std::lock_guard<std::mutex> lock(mutex);
//do something (should't be done while function A is executing)
return something;
}
现在的问题是,函数 A 和 B 不应该同时执行。这就是我使用互斥锁的原因。但是,如果从多个线程同时调用函数 B 则完全没问题。但是,互斥锁也阻止了这种情况(我不希望这样)。那么,有没有办法保证 A 和 B 不会同时执行,同时仍然让函数 B 被并行执行多次?
【问题讨论】:
-
也许使用某种信号量来跟踪每个函数的当前调用者数量?
标签: c++ multithreading parallel-processing mutex