我想從線程修改一些字符串(每個線程都有自己的字符串),但所有字符串都存儲在一個向量中,因爲我需要能夠在線程完成它們的事情後訪問它們。如何從線程修改字符串?
我沒有用在C++的線程,因此,如果這是做一件可怕的事情,所有的建議表示歡迎:)
基本上唯一的程序不會是現在:
- 創造一些螺紋
- 發送一個字符串和一個ID給每個線程
- 線程函數修改字符串的ID添加到它
- 結束
這給出了一個段錯誤:(
這只是一個不錯的辦法?我還能怎麼做?
static const int cores = 8;
void bmh_t(std::string & resr, int tid){
resr.append(std::to_string(tid));
resr.append(",");
return;
}
std::vector<std::string> parbmh(std::string text, std::string pat){
std::vector<std::string> distlists;
std::thread t[cores];
//Launch a group of threads
for (int i = 0; i < cores; ++i) {
distlists.push_back(" ");
t[i] = std::thread(bmh_t,std::ref(distlists[i]), i);
}
for (int i = 0; i < cores; ++i) {
t[i].join();
}
return distlists;
}
預分配的載體。 Pushback可以在大多數標準庫中調整並移動向量元素,這不是線程安全的。一旦建立了矢量大小,它就是線程安全的。 –
doug
偏題:看看'std :: future'。 – user4581301