首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

STL中的地图 多线程同步有关问题

2013-11-29 
STL中的map 多线程同步问题如果有两个线程在操作一个map,其中一个在对map做遍历(一直做遍历,循环),另外一

STL中的map 多线程同步问题
如果有两个线程在操作一个map,其中一个在对map做遍历(一直做遍历,循环),另外一个一直在对map进行值插入,如何同步两个线程并且使得两个线程获得较高的访问效率
[解决办法]

引用:
当线程A插入完成后,线程B的迭代器是否失效????
还有就是可不可以不用加锁。。。。。。如果不可以,不加锁有什么坏处


如果涉及到插入、删除,一旦完成,原来的迭代器就失效了,
如果只是枚举的话,应该是没有影响的,当然,是否改变迭代器所指向的数据又是另一回事情了。
所以,在多线程同时访问同一个MAP的时候,需要加锁保护。
不加锁,无法保证当线程A正在使用迭代器的时候,线程B没有正在使用迭代器。
[解决办法]
A插入,B的线程在遍历时索引就会出错。

所以MAP遍历都需要加锁,不加锁就直接crash了。

这些同步开销没法避免,唯一可以做的就是通过设计来尽量避免同步的出现。

比如,一个MAP,读写进行分离,也就是在指定条件下只能读,另外时间只能写,不过这样争取来的开销还是比较有限的。一般应用都不考虑这些。

热点排行