多线程的加锁有关问题
多线程的加锁问题
用c/c++怎么对map的不同的值加锁啊,例如map有1,2,3,4。。。。当值是1时对map的1进行加锁,其他的线程还可以处理map的其它的值。请高手指教,谢谢了。
------解决方案--------------------
不可以的,map实现是红黑树,写的时候需要旋转的。多线程写的话,行为结果未知。
------解决方案--------------------
如果你没有插入操作,可以对每个值加一个锁,这样就没问题了,不过如果数据多系统资源消耗太大,实际上没必要这么细的锁,而且还不能插入。。。
------解决方案--------------------
map 有多少个值,定义多少个锁
用c/c++怎么对map的不同的值加锁啊,例如map有1,2,3,4。。。。当值是1时对map的1进行加锁,其他的线程还可以处理map的其它的值。请高手指教,谢谢了。
------解决方案--------------------
不可以的,map实现是红黑树,写的时候需要旋转的。多线程写的话,行为结果未知。
------解决方案--------------------
如果你没有插入操作,可以对每个值加一个锁,这样就没问题了,不过如果数据多系统资源消耗太大,实际上没必要这么细的锁,而且还不能插入。。。
------解决方案--------------------
map 有多少个值,定义多少个锁
- C/C++ code
void changemap(int i) { lock(mutex[i]); change(map[i]); unlock(mutex[i]); }
------解决方案--------------------