我写了一个代码来做一些多线程来测试我的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