我正在使用 C 14,但我不知道如何并行寫入具有多執行緒的容器。
假設我有這樣一張地圖:std::map<int, int> mp {{1, 0}, {2, 0}, {3, 0}}和如下功能:
void updateValue(int& value) {
value = xxx; // heavy calculation
}
然后我嘗試創建三個執行緒:
std::vector<std::thread> vec;
for (auto& ele : mp) {
vec.emplace_back(std::thread(updateValue, std::ref(ele.second)));
}
但是,問題在于它std::map不是執行緒安全的。
所以看來我需要在函式中添加一個鎖updateValue。但是如果我這樣做,函式必須被一個一個呼叫,就像一個單執行緒一樣。
在這種情況下,有什么方法可以讓我使用多執行緒嗎?
uj5u.com熱心網友回復:
您的示例是安全的,不需要任何額外的同步。
[container.requirements.dataraces]/2盡管有[res.on.data.races],當同一容器中不同元素中包含的物件的內容
vector<bool>被同時修改時,需要實作來避免資料競爭。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417318.html
標籤:
