如何同步这些线程?

时间:2019-08-31 16:29:28

标签: c multithreading pthreads pthread-join

我有用于线程的此代码,并且不确定如何正确同步它们。我希望程序输出看起来像这样:

  

Soy el hilo 0 y a = 1

     

Soy el hilo 1 y a = 0

     

Soy el hilo 0 y a = 1

     

Soy el hilo 1 y a = 0

而不是这样:

  

Soy el hilo 0 y a = 1

     

Soy el hilo 0 y a = 2

     

Soy el hilo 0 y a = 3

     

Soy el hilo 0 y a = 4

     

Soy el hilo 1 y a = 3

     

Soy el hilo 1 y a = 2

     

Soy el hilo 1 y a = 1

     

Soy el hilo 1 y a = 0

     

Soy el hilo 0 y a = 1

     

Soy el hilo 0 y a = 2

     

Soy el hilo 0 y a = 3

     

Soy el hilo 0 y a = 4

这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define NB_THREADS 2

int a=0;

void *
funcion_th (void *i)
{
    int *j = (int *)i;

    for (;;)
    {
        if (*j == 0)
            a++;
        else
            a--;

        fprintf (stderr, "Soy el hilo %d y a=%d\n", *j, a);
    }

    return (NULL);
}

int
main()
{
    pthread_t id[NB_THREADS];
    int i[NB_THREADS];

    for (int j=0; j<NB_THREADS; j++)
    {
        i[j]=j;
        pthread_create (&(id[j]), NULL, funcion_th, (void *)&i[j]);
    }

    for (int j=0; j<NB_THREADS; j++)
    {
        pthread_join (id[j], NULL);
    }

    exit (EXIT_SUCCESS);
}

0 个答案:

没有答案