【发布时间】:2011-06-28 21:21:59
【问题描述】:
我有 2 个线程(使用 boost 线程库)和 Windows 上的全局向量(Visual Studio 2005)。我创建了线程 - 首先是读取文件 (vector.push_back(value)) 并增加“读取计数器”,另一个是处理已加载的数据(第二个“指针”记住已处理向量中的索引)。处理类似于vector[i] = function(vector[i]);
当我启动程序时,它以异常结束Unhandled exception at 0x0041350c in program.exe: 0xC0000005: Access violation writing location 0x00b82214. 读取计数器的值小于记录计数(仍在读取文件),vector.size() 为“readCounter + 1”,“处理指针”+/ - 2200(比读取计数器少得多 - 读取空值没有问题)...每次运行的值都不同(有时,不会抛出异常并且程序完成)...
当我删除处理线 (vector[i] = function(vector[i]);) 时没有问题发生......所以我猜,向量不是线程安全的。你能帮我,如何防止这个问题?
【问题讨论】:
-
使事情线程安全会增加在大多数情况下不需要的大量开销。您应该始终假定标准库不是线程安全的。
标签: c++ windows multithreading boost vector