我寫了一個代碼來做一些多線程來測試我的dd的寫/讀速度。同一線程ID的
一切正在編譯和運行良好,但我注意到線程ID是相同的。
因此,我創建了一個條件(請參閱代碼註釋),它令人驚訝地表明我創建的每個線程都具有相同的ID。
int main(int argc, char *argv[]) {
//long filesize = 10000000;
int nb_threads = atoi(argv[2]);
pthread_t tid[4];
int ok;
double latency;
double bandwith;
int err;
int i = 0;
srand(time(NULL));
while(i < nb_threads){
pthread_create(&(tid[i]),NULL,launch_dd_bm,(void *) argv);
pthread_join(tid[i], NULL);
/* if(!pthread_equal(tid[i],tid[i-1])){
printf("Thread ID: %u",tid[i]);
i++;
}
*/
i++;
}
return EXIT_SUCCESS;
}
void *launch_dd_bm(void *arg);
我知道我不測試線程是否成功創建,但他們是。 我剛剛刪除了上述代碼中的條件,以便您可以真正瞭解發生了什麼。
但我的線程應該都是平行運行,那麼爲什麼不是這樣呢? 爲了測試我的dd,我需要在多線程的同時寫入或讀取。 – 2014-09-21 18:19:58
@JahMyst如果你想讓你的線程並行運行,不要在'pthread_create()'後面的循環中調用'pthread_join()'。 – user4815162342 2014-09-21 18:22:26
事實上,你應該有一個*獨立的循環*在每個線程之後調用'pthread_join'來創建全部循環。在同一個循環中執行這兩個操作,完全序列化該程序,就好像您剛剛在主線程中反覆調用'launch_dd_bm(argv)'一樣。 – 2014-09-21 18:43:08