我想在 C 中并行编程,我应该避免使用 pthread_join() 吗?
I want to program in parallel in C, should i avoid to use pthread_join()?
我想创建多个线程并在创建它们的同时启动它,以使代码尽可能快地运行
我试着这样做:
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
}
这个执行是并行的吗?如果我的 printf 出现问题是否正常? (我认为这是正常的,但我更想问)
谢谢
存在以下问题。
- 您需要为不同的线程设置不同的 pthread_t 句柄。
- 不同的线程需要不同的 arg 变量。
- 您应该在创建所有线程后调用 pthread_join()。 pthread_join() 将阻塞调用线程,直到另一个线程退出。这将等待该线程退出。
。
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
}
is this execution parallel ? is it normal if my printf are in a
disorder ? (i think that this is normal but i prefer to ask)
现在执行是并行的。
不同线程中的打印可能会以不同的顺序出现。这取决于在什么时间安排哪个线程。
您可以使用互斥量、信号量、条件变量来同步线程。等等
我想创建多个线程并在创建它们的同时启动它,以使代码尽可能快地运行 我试着这样做:
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
}
这个执行是并行的吗?如果我的 printf 出现问题是否正常? (我认为这是正常的,但我更想问)
谢谢
存在以下问题。
- 您需要为不同的线程设置不同的 pthread_t 句柄。
- 不同的线程需要不同的 arg 变量。
- 您应该在创建所有线程后调用 pthread_join()。 pthread_join() 将阻塞调用线程,直到另一个线程退出。这将等待该线程退出。
。
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
}
is this execution parallel ? is it normal if my printf are in a disorder ? (i think that this is normal but i prefer to ask)
现在执行是并行的。 不同线程中的打印可能会以不同的顺序出现。这取决于在什么时间安排哪个线程。 您可以使用互斥量、信号量、条件变量来同步线程。等等