我正在编写一个多线程服务器,它包含5或6个全局数据结构(映射,向量等),并试图弄清楚是否需要为某些数据保存互斥锁以便从地图中读取值或者向量,或者当我要更改数据/添加新项目时,只需要持有互斥锁。
答案 0 :(得分:5)
如果多个线程正在访问容器,并且至少有一个线程正在修改容器的内容,则需要同步对容器的访问。如果没有任何线程修改容器的内容,则不需要同步对它的访问。
[请注意,C ++语言标准没有提到线程(至少尚未提及),因此不需要容器可以从多个线程中使用。也就是说,我上面所说的至少对于标准库的所有主要实现都是如此,并且是即将推出的C ++语言标准的C ++ 0x修订版中的要求。]