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
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


0