我想在 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 出现问题是否正常? (我认为这是正常的,但我更想问)

谢谢

存在以下问题。

  1. 您需要为不同的线程设置不同的 pthread_t 句柄。
  2. 不同的线程需要不同的 arg 变量。
  3. 您应该在创建所有线程后调用 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)

现在执行是并行的。 不同线程中的打印可能会以不同的顺序出现。这取决于在什么时间安排哪个线程。 您可以使用互斥量、信号量、条件变量来同步线程。等等