[問題] stl container with multi thread
剛才正在查有關 stl container 跟 multi thread間的關系
如果有一個std::map<> 會在2個thread中被用到
那以下的解決方式 是否最合適?
class ThreadSafeMap{
public:
void aquire(){ lock.lock(); }
void release(){ lock.release(); }
map& getMap(){ return mymap;}
protected:
boost::mutex lock;
map<> mymap;
}
在任何thread中 不論要取得 修改 或 做iterator 都必須先呼叫
ThreadSafeMap tsm;
//先進行上鎖動作
tsm.aquire();
//取得map
map<>& mymap = tsm.getMap();
//然後 我們才能做這類的讀寫動作
mymap["123"] = "456";
map<>::const_iterator itr;
for(itr = map.begin();itr!=map.end();itr++)
cout << itr->second;
//解除鎖定
tsm.release();
在不考慮效能(1 writer - many reader)的狀況下,
這解法是否可行? 或者有更好用的解法?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.70.172.147
→
08/10 21:00, , 1F
08/10 21:00, 1F
→
08/10 21:01, , 2F
08/10 21:01, 2F
→
08/10 21:04, , 3F
08/10 21:04, 3F
※ 編輯: neigence 來自: 219.70.172.147 (08/10 21:05)
→
08/10 21:11, , 4F
08/10 21:11, 4F
→
08/10 21:13, , 5F
08/10 21:13, 5F
→
08/10 21:14, , 6F
08/10 21:14, 6F
→
08/11 01:06, , 7F
08/11 01:06, 7F
→
08/11 01:08, , 8F
08/11 01:08, 8F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章