我目前有一個運行良好的代碼,但我正在學習 C ,因此想擺脫任何新手錯誤。基本上代碼是
vector<vector<float>> gAbs;
void functionThatAddsEntryTogAbs(){
...
gAbs.pushback(value);
}
int main(){
thread thread1 = thread(functionThatAddsEntryTogAbs,args);
thread thread2 = thread(functionThatAddsEntryTogAbs,args);
thread1.join(); thread2.join();
std::sort(gAbs.begin(),gAbs.end());
writeDataToFile(gAbs,"filename.dat");
}
例如,我記得了解到只有少數情況下全域變數是正確的選擇。我最初的想法只是讓執行緒寫入檔案,但是我不能保證資料已經排序(我需要),這是我使用std::sort的 . 有沒有關于如何改進這一點的建議,以及更多經驗的程式員會使用哪些替代方案?
代碼需要盡可能快。
提前致謝
uj5u.com熱心網友回復:
您可以訪問和修改全域資源,包括來自不同執行緒的容器,但您必須同時保護它們不這樣做。一些例外是:不能修改,容器本身沒有改變,執行緒正在處理單獨的條目。
在您的代碼中,條目被添加到容器中,因此您需要互斥體,但是這樣做您的并行代碼可能不會提高您的速度。更好的方法可能是知道需要添加多少條目,添加空條目(只是初始化),然后為執行緒分配范圍,以便它們可以填充條目。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491153.html
