我有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]);
)沒有問題發生...所以我猜,向量不是線程安全的。你能幫助我,如何預防這個問題?
使事情線程安全補充說,是不是在大多數情況下需要顯著開銷。您應該*總是*假定標準庫不是線程安全的。 –