Soy un principiante y no sé cómo resolver esta pregunta de programación de Linux. Me gustaría pedirle consejo a un experto y que me ayude a compilarlo.
/************
Implementación de programación? Sincronización y exclusión mutua de procesos
Tema: Hay padre/hijo/ hija Tres personas y un plato.
Cuando el plato está vacío, el padre pone al azar plátanos o manzanas en el plato;
El hijo y la hija inmediatamente toman la fruta, pero el hijo solo toma Apple, la hija solo toma plátanos
Padre puso *** 20 veces.
¡Simulación de programación!
********** ****** **/
#includelt;stdio.hgt;
#include?lt;errno.hgt;
#include?lt ;semaphore.hgt;
#include?lt;fcntl.hgt;
#include?lt;unistd.hgt;
//#include?lt ;process.hgt;/ /para?windows
#define?OPEN_FLAG?O_RDWR|O_CREAT
#define?OPEN_MODE?00777
#define?INIT_V0
static?sem_t?*sem_apple?=?NULL;
static?sem_t?*sem_banana?=?NULL;
int?fatherdo(){ p>
int ?i=20;
mientras(i--gt;0){
printf("[u]padre?put?s?\n" ,i,i2== 0?"Apple":"Banana");
if(i2==0){
sem_post(sem_apple);
}else{ p>
sem_post(sem_banana);
}
dormir(1);
}
//Eliminar el semáforo creado por el sistema
sem_unlink("sem_apple");
sem_unlink("sem_banana");
//Destruir completamente el abrir semáforo
p>sem_close(sem_apple);
sem_close(sem_banana);
return?0;
}
int?i=10;
mientras(i--gt;0) ){
//Operación P
sem_wait(sem_apple);
printf("[u]Hijo: ¡Obtuve una manzana, padre! \n\n", i);
}
return?0;
}
int?hijado(){
dormir(2);
int?i=10;
mientras(i--gt;0){
// Operación P
sem_wait(sem_banana);
printf("[u]Hija: ¡I?get?an?bnana,padre!\n\n",i); p>
}
volver
?0;
}
int?main(){
printf("Program?begin:\n\n"); //Crear 2 nombres semáforo sem_apple?=?sem_open("sem_apple",?OPEN_FLAG,?OPEN_MODE,?INIT_V);? sem_banana?=?sem_open("sem_banana",?OPEN_FLAG,?OPEN_MODE,?INIT_V);?
pid_t?pid=-1;
pid=fork();
if(-1==pid){
error("¿Error? fork( )!"); return?1;
}else?if(pid==0){
//Subproceso? Hijo
sondo ();
}else?if(pidgt;0){
pid=fork();
if(-1==pid){
perror("¿Error?fork()!"); return?1;
}else?if(pid==0){
//Subproceso hija
hija();
}else?if(pidgt;0){
//Proceso principal
padredo( );
printf("¿Programa?Fin...\n\n");
}
}
printf( "[d ?lt;=?d]¡Tres?Procesos?son?end!\n",getpid(),getppid());
return?0;
}
Modo de comunicación del semáforo del proceso.
Referencia:?/s/blog_510737a301012z7e.html
Normalmente me comunico entre hilos. No estoy muy familiarizado con la comunicación entre procesos, así que intenté escribir sobre ello.