即時開始使用pthreads cpp庫來解決一些作業。初始化Pthreads while While循環
其中之一,我必須創建一個線程爲每個文件命名從1到T(T是固定的定義爲一個正整數),並且此線程必須處理該文件的一些信息。
其實,我的想法是把一個while循環主,這樣的:
pthread_t threads[T];
void *imprime(void *arg) {
int a=-1, b=-1;
string* t = reinterpret_cast<std::string*>(arg); //Recovering str
string name = *t;
cout<<"\nName: "<<name<<endl;
ifstream inFile(nome.c_str());
while(inFile>>a) {
inFile>>b;
cout<<"a: "<<a<<"\nb: "<<b<<endl;
}
}
int main() {
int lim = 1;
string nome;
int a = 0, b = 0;
while(lim <= T) {
nome = to_string(lim);
cout<<"Opening: "<<lim<<endl;
pthread_create(&threads[lim], NULL, &imprime, (void *)&nome);
lim++;
}
cin.get();
return 0;
}
首先,線程didnt跑,什麼都沒有發生。所以,我把「cin.get()」置於這個時間之下,它突然起作用(我還沒有理解)。
但是現在,如果T是1,它可以正常工作,但是如果T> 1,它不會像它應該工作的那樣工作。
我把兩個文件(名稱1,2和3;與整數 'a' 和由空格分隔 'B'):
/*
File '1' = "1 2"
File '2' = "3 4"
File '3' = "5 6"
*/
並且那輸出:
Opening: 1
Opening: 2
Opening: 3
Nome: 3
a: 5
b: 6
Nome: 3
a: 5
b: 6
Nome: 3
a: 5
b: 6
由於某種原因,程序在啓動線程之前運行整個T次,並且用最後一個線程覆蓋每個線程。
我該怎麼辦?
你錯過之前'加入所有的線程更好的選擇main()'退出。 –
這是一種使用在'main'中被回收的變量共享數據的非常冒險的方式。理想情況下,你給出它所擁有的線程數據,你'main'永遠不會再觸及它。不能保證線程會在下一次循環迭代之前啓動並複製該字符串。 – tadman
爲什麼不使用'std :: thread'呢? – 4386427