Linux - semaforos

 
Vista:

semaforos

Publicado por leo (1 intervención) el 23/01/2006 08:54:42
Hola a tod@s:

Tengo que realizar el siguiente programilla en linux. He programado un poco pero ahora no se como seguir.

ENUNCIADO
• utilizando hilos, ejecute concurrentemente las dos funciones(hilo1 e hilo2 implementadas abajo) dentro del proceso.
• utilizando semáforos, los accesos sobre la variable global x se realicen en
exclusión mutua y el valor que ha de imprimir la función hilo2 siempre
aparezca en pantalla tras haberse escrito el del hilo1.

PROGRAMA QUE HE HECHO

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
int x ;

void *hilo1(void *arg)
{
int i,j;
sem_t sem1,sem2;
char c[5];
printf("Escriba un numero : \n");
scanf("%s",c);
x=atoi(c);/*convierte a entero*/
j=5;
for (i=1; i<=10; i++)
{
j = j + x;
x = x + 1;
}
printf("Hilo 1 j: %d\n", j );
}

void *hilo2(void *arg)
{
int k, j;
k = x * 2;
for(j=1; j<=3; j++)
{
k = k + j*x;
x = x - 1;
}
printf( "Hilo 2 k:%d \n", k );
}

int main ()
{
pthread_t id_hilo1,id_hilo2;
pthread_attr_t atrib1;
pthread_attr_t atrib2;

sem_init(

pthread_attr_init(&atrib1);
pthread_attr_init(&atrib2);
pthread_create(&id_hilo1, NULL, hilo1, NULL);
pthread_create(&id_hilo2, NULL, hilo2, NULL);
pthread_join(id_hilo1, NULL); /*Esperar por el 1º hilo*/
pthread_join(id_hilo2, NULL);

}

Me podeis ayudar a terminar.

MUCHAS GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:semaforos

Publicado por n0str0m0 (1503 intervenciones) el 24/01/2006 20:39:11
Hola, ahora no tengo un linux delante, pero a ver si esto te sirve:

- Declara los semáforos en el programa principal. Los hilos comparten el espacio de direcciones del padre así que no tendrás que pasarlos como parámetros ni nada.

- Cuando vayas a escribir sobre la variable x tienes que bloquear al otro hilo con el semáforo, es decir:

bloquear
hacer lo que sea con X
liberar

El otro hilo tb. deberá hacer lo mismo evidentemente. Creo que las funciones son sem_post y no sé cuál es la otra, creo que sem_wait.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:semaforos

Publicado por chuidiang (22 intervenciones) el 25/01/2006 20:12:42
Hola:

Creo que te constesté en otro foro y te dije que podías usar las funciones de pthread_mutex, que te permiten sincronizar sin necesidad de manejar explicitamente los semaforos.

De todas formas, si necesitas semaforos, en http://www.geocities.com/chuidiang/semaforos/semaforo.html tienes un pequeño tutorial sobre el tema. El proceso es el que te cuenta n0str0m0, pero en el tutorial tienes los detalles necesarios de las funciones.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar