我有一個關於線程安全性和互斥鎖的問題。我有可能無法在同一時間執行,因爲這可能會導致問題的兩個功能:C++:爲其他函數鎖定互斥鎖,但本身可以並行執行的函數
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並行執行多次?
也許使用某種信號量來跟蹤每個函數的當前調用者的數量? –