我想创建多个线程并在创建它们的同时启动它,以使代码尽可能快地完成 我试图这样做:
for (i = 1; i < nbClients+1; i++)
{
pthread_create(&tClient, NULL, procedureClient, &i);
pthread_join(tClient, NULL);
free(clients[i].panier); //Libération de la mémoire pour chaque panier
}
如果我执行pthread_join,主线程被暂停,因此它是顺序的,所以如果我这样做:
for (i = 1; i < nbClients+1; i++)
{
pthread_create(&tClient, NULL, procedureClient, &i);
free(clients[i].panier); //Libération de la mémoire pour chaque panier
}
这个执行并行吗?如果我的印刷品出现混乱,这是正常的吗? (我认为这是正常的,但我更愿意问)
由于
答案 0 :(得分:2)
存在以下问题。
。
pthread_t tClient[MAX_NUM_THREADS];
int arg[MAX_NUM_THREADS] = {0};
for (i = 0; i < nbClients; i++)
{
arg[i] = i+1; //Changed your for loop.
pthread_create(&(tClient[i]), NULL, procedureClient, (void*)&(arg[i]));
}
/* Other code. */
for (i = 0; i < nbClients; i++)
{
pthread_join(tClient[i], NULL); //Will wait for ith thread to exit.
free(clients[i].panier); //Libération de la mémoire pour chaque panier
}
这个执行并行吗?如果我的printf在a中是正常的 混乱? (我认为这是正常的,但我更愿意问)
现在执行是并行的。 不同线程中的打印可能会有不同的顺序。这取决于在什么时间安排哪个线程。 您可以使用互斥锁,信号量,条件变量来同步线程。等