我有用于线程的此代码,并且不确定如何正确同步它们。我希望程序输出看起来像这样:
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);
}