多个线程读写std:地图,读线程需要加锁吗
多个线程读写std::map,读线程需要加锁吗问题描述:1. 有多个线程同时操作一个map2. 有的线程会对map做 插入
多个线程读写std::map,读线程需要加锁吗
问题描述:
1. 有多个线程同时操作一个map
2. 有的线程会对map做 插入 或删除操作,那么所有写的地方都加锁
3. 有些线程只是读map的内容,这样需要加锁吗? 读有两种,一种是find,一种是iter循环
[解决办法]
全部只是读的话不需要。
有一个线程会写的话,只读的线程也要加锁。
[解决办法]
同上,有写就要枷锁
[解决办法]
++
[解决办法]只要有写操作就应该加锁,读的过程中iter有可能会改变。
[解决办法]必须加锁.
[解决办法][解决办法][解决办法]需要加锁
[解决办法][解决办法]估计会有异常,楼主你最好写个小测试程序测一下,如果没加锁,出了异常,那就没话说了。
[解决办法]只要多线程读写就需要同步!
[解决办法]http://www.sgi.com/tech/stl/thread_safety.html
只要有写的动作,就有可能改变map内部的结构,致使当前已获得的迭代器失效。
既然用迭代器了,就全程上锁吧
[解决办法]如果线程都对其写的话,加锁是必须的
[解决办法]可以做 lock-free 的, 读不加锁, 写要复制一份, 改写, 然后再回写, 有些情况下还是比较合适. 等有DCAS原语了这样做就会流行...
[解决办法]lock_free也是一种锁。
[解决办法]