2011-11-21 150 views
0

簡體中文: 我正在寫入realbasic的插件。我有兩個擁有自己線程的插件。一切都很好,直到我開始使用std :: vector。我在這兩個插件中都有矢量變量,並且我沒有使用矢量來使用相同的數據或在線程之間共享數據或其他任何東西。我的模型如下所示:在多線程C++程序中使用std :: vector時崩潰的應用程序

thread_1{ 
    vector<> variable_1; 
    foreach{ 
     variable_1.push_back(something); 
    } 
} 


thread_2{ 
    vector<> variable_2; 
    foreach{ 
     variable_2.push_back(something); 
    } 
} 

如果我沒有聲明靜態向量,程序大部分時間都會崩潰。但即使當我聲明變量是靜態的,並使用一些算法如排序或複製,崩潰再次出現。 似乎對vector上的操作正在使用一些不是多線程安全的抽象類或其他類。或者我做錯了什麼? 謝謝。

我使用Windows 7 x64,visual studio 2008 pro,在發佈win32上編譯。

+5

也許'something'的拷貝構造函數不是線程安全的? –

+3

你可以把真實的代碼?用你發佈的內容,不可能知道它是否來自多線程情況。 – Raveline

+0

我同意上面關於複製構造函數的評論。異步修改的引用計數器是我相信的一個經典問題。 – Rulle

回答

1

AFAIK,分配器不是線程安全的。您應該以線程安全的方式分配向量(保留)或使用線程安全分配器。