Hi,
ich habe mich mal an ein Beispiel gesetzt, um die Semaphoren vielleicht besser zu verstehen, aber irgendwie klappt das nicht. Hab wahrscheinlich einen Denkfehler.
Szenario war, dass man zwei Kassen hat und 10 Autos anstehen. Nun kommt ein Auto an Kasse 1 (Kasse 1 wird gesperrt) und das Auto danach an Kasse 2 (Kasse 2 wird gesperrt). Dann, wenn ein Auto fertig ist, wird die jeweilige Kasse wieder freigegeben.
Nun mein - naja - Code
Bitte um Hilfe
ich habe mich mal an ein Beispiel gesetzt, um die Semaphoren vielleicht besser zu verstehen, aber irgendwie klappt das nicht. Hab wahrscheinlich einen Denkfehler.
Szenario war, dass man zwei Kassen hat und 10 Autos anstehen. Nun kommt ein Auto an Kasse 1 (Kasse 1 wird gesperrt) und das Auto danach an Kasse 2 (Kasse 2 wird gesperrt). Dann, wenn ein Auto fertig ist, wird die jeweilige Kasse wieder freigegeben.
Nun mein - naja - Code
Code:
// HINWEIS !!! : // Kompilieren --> gcc -o _____ _____.c -lrt #include <stdlib.h> #include <stdio.h> #include <sys/wait.h> #include <signal.h> #include <semaphore.h> #include <fcntl.h> #include <sys/errno.h> #include <sys/types.h> int main(){ sem_t* sema; sem_t* semb; pid_t i_pid[10]; int i; int val1; sem_unlink("Kasse 1"); sem_unlink("Kasse 2"); sema = sem_open("Kasse 1", O_CREAT, 0700, 1); semb = sem_open("Kasse 2", O_CREAT, 0700, 1); for(i = 1; i <= 20; i++) { if((i_pid[i]= fork()) == 0){ break; } } val1=sem_getvalue(sema, &val1); if(val1 == 1){ sem_wait(sema); printf("[val1 = %d] Kasse1\n", val1); sem_post(sema); }else{ sem_wait(semb); printf("[val1 = %d] Kasse2\n", val1); sem_post(semb); } waitpid(i_pid[19],0,0); for(i = 0; i<20; i++){ kill(i_pid[i], 15); } sem_close(sema); sem_close(semb); printf("/*---------Prozesse-----------------*/\n"); system("ps -e -u"); printf("/*---------Ende: Prozesse-----------*/\n"); return 0; }
Comment