batiguason_11
Bovino adicto
- Desde
- 27 Jun 2009
- Mensajes
- 703
- Tema Autor
- #1
¿Qué tal gente del corral?
Veran tengo un problema con el siguiente código:
Verán mi problema es que nunca entra a la sección critica. Despues del mensaje "process n before critical section" se bloquea... Pero no sé el motivo, ya que en ningun momento invoca a mi función down. Si alguien pudiera ayudar estaría agradecido ^.^
Saludos y gracias!!
Veran tengo un problema con el siguiente código:
Código:
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<errno.h>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#define SEMPERM 0666
extern int errno;
int initsem(key_t key){
int status=0,semid;
if((semid=semget(key,1,SEMPERM|IPC_CREAT|IPC_EXCL))==-1)
if(errno==EEXIST)
semid=semget(key,1,0);
else
status=semctl(semid,0,SETVAL,1);
if(semid==-1 || status==-1){
perror("initsem");
return (-1);
}
return semid;
}
int down(int semid){
struct sembuf d_buf;
d_buf.sem_num=0;
d_buf.sem_op=-1;
d_buf.sem_flg=SEM_UNDO;
if(semop(semid,&d_buf,1)==-1){
perror("down");
exit(1);
}
return 0;
}
int up(int semid){
struct sembuf u_buf;
u_buf.sem_num=0;
u_buf.sem_op=1;
u_buf.sem_flg=SEM_UNDO;
if(semop(semid,&u_buf,1)==-1){
perror("up");
exit(1);
}
return 0;
}
int trata(key_t key){
int semid,pid=getpid();
if((semid=initsem(key))<0)
exit(1);
printf("\nprocces %i before critical section\n",pid);
down(semid);
printf("\nprocess %i in critical section\n",pid);
sleep(5);
printf("\nprocess %i leaving critical section\n",pid);
up(semid);
printf("\nprocess %i exiting",pid);
exit(0);
}
main(){
char *path="/Users/kar/desktop";
key_t my_key=ftok(path,4);
if(fork()==0)
trata(my_key);
if(fork()==0)
trata(my_key);
}
Verán mi problema es que nunca entra a la sección critica. Despues del mensaje "process n before critical section" se bloquea... Pero no sé el motivo, ya que en ningun momento invoca a mi función down. Si alguien pudiera ayudar estaría agradecido ^.^
Saludos y gracias!!