Red de conocimiento informático - Material del sitio web - ¿Cómo utilizar los semáforos proporcionados por Linux para lograr la exclusión mutua y la sincronización de procesos?

¿Cómo utilizar los semáforos proporcionados por Linux para lograr la exclusión mutua y la sincronización de procesos?

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define N 3

pthread_mutex_t mutex_w,mutex_r; /Escribir mutex

sem_t sem_w,sem_r;

int data[N];

int pos=0;

void *function_w (void *arg)

{

int w = *(int *)arg

pos = w

while( 1)

{

usleep(100000);

sem_wait (&sem_w);//esperar un recurso grabable

pthread_mutex_lock( &mutex_w);//prohibir que otro hilo escriba este recurso

data[pos] = w

w++;

w++;

w++;

w++;

pos++;

pos=pos%N;

pthread_mutex_unlock(&mutex_w);// Otros hilos puede escribir en este recurso

sem_post(&sem_r); // Liberar el recurso leído

}

return (void *)0;

}

void *function_r(void *arg)

{

while(1)

{

sem_wait(&sem_r);//Esperar recursos legibles

pthread_mutex_lock(&mutex_r);//Prohibir que otros hilos lean este recurso

printf("%d\n ", data[(pos+N-1)%N]);

pthread_mutex_unlock(&mutex_r); // Otro hilo puede leer este recurso

sem_post(&sem_w); escribir recurso

}

return (void *)0

}

int main(int argc, char **argv)

{

pthread_t hilo[2*N];

int i

pthread_mutex_init(&mutex_w,NULL) ;

pthread_mutex_init(&mutex

_r,NULL);

sem_init(&sem_w,0,N

sem_init(&sem_r,0,0);

para(i=0; i

{

if ( pthread_create(&thread [i],NULL,function_w,(void *)&i) < 0)//Crear una escritura hilo

{

perror("pthread_create");

exit(-1);

}

}

for( i=N; i<2*N;i++)

{

if ( pthread_create(&thread[i],NULL,function_r , NULL) <0)//crear hilo de lectura

{

perror("pthread_ create");

exit(-1);

}

}

dormir(1);

regresar(0);

}