我想從輸出文件中逐行讀取。每個線程讀取一行然後處理數據。同時下一個線程必須讀取下一行。std :: thread - 從文件行中逐行讀取
std::ifstream infile("test.txt");
std::mutex mtx;
void read(int id_thread){
while(infile.good()){
mtx.lock();
std::string sLine;
getline(infile, sLine);
std::cout << "Read by thread: " << id_thread;
std::cout << sLine << std::endl;
mtx.unlock();
}
}
void main(){
std::vector<std::thread> threads;
for(int i = 0; i < num; i++){
threads.push_back(std::thread(parallelFun, i));
}
for(auto& thread : threads){
thread.join();
}
return 0;
}
當我運行此代碼時,我得到: 第一個線程讀取所有行。我怎樣才能讓每個線程讀取一行?
編輯
正如評論所有我需要做的是提到大的測試文件。 謝謝你們!
什麼問題?無論如何,讀取操作都是由互斥鎖序列化的。 – 2014-11-06 13:03:43
這就是線程的工作原理,它們運行一段時間,然後讓另一個線程運行一段時間,等等。如果單個線程運行足夠長的時間以讀取短文件中的所有行,那麼您必須找出一些其他方法來一次只讀取一行(如發送一個條件變量?)。 – 2014-11-06 13:06:42
如果您希望閱讀與處理並行進行,您應該在閱讀該行後立即解鎖互斥鎖,並且直到處理完您讀取的數據後纔開啓互斥鎖。 – Angew 2014-11-06 13:07:39