2013-01-21 59 views
0

我有兩個線程,每個線程都有一個函數來操縱相同的std:map和std:vector變量。鎖定地圖和向量從兩個線程訪問

保持這些變量的最佳方法是什麼?

謝謝

+3

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)另外,標準庫中有很多有用的類[線程支持] (http://en.cppreference.com/w/cpp/thread)。 –

+0

這也有助於告訴你正在使用什麼系統和庫。 – drescherjm

回答

1

這取決於操作的種類。你只覆蓋存儲的值,還是你也插入/刪除元素?在前一種情況下,您只能鎖定容器的特定元素(例如,通過在每個元素中嵌入std::mutex),而在後一種情況下,您需要在每次操作期間鎖定整個容器。

0

沒有通用的最佳途徑。您需要通過一個相應地鎖定/解鎖互斥鎖的函數來清理對同步結構的所有讀/寫調用。你可能有多個功能,但它們都應該在同一個共同的互斥體上運行。

它最好有一個存儲類,並保持映射和向量爲私有成員變量。並在該類中寫入轉發函數來鎖定/解鎖互斥鎖,並將讀/寫調用轉發給實際的映射或向量。那麼你有數量有限的門訪問實際結構。而且它會更容易管理。

您可以使用boost::mutex作爲該類的成員變量。