Hallo,
in folgendem Code möchte ich einfach den Umgang mit Semaphoren näher kennenlernen. Allerdings funktioniert es nicht so, wie ich dachte.
Es scheint so, als ob semop() blockiert, da die nächste Zeile nicht ausgegeben wird. Aber warum?
Das Programm kann man einfach kopieren, wer es testen möchte.
in folgendem Code möchte ich einfach den Umgang mit Semaphoren näher kennenlernen. Allerdings funktioniert es nicht so, wie ich dachte.
Es scheint so, als ob semop() blockiert, da die nächste Zeile nicht ausgegeben wird. Aber warum?
Das Programm kann man einfach kopieren, wer es testen möchte.
Code:
#include <sys/ipc.h>
#include <sys/sem.h>
int main(int argc, char **argv)
{
int semID;
struct sembuf sema;
/* Semaphore erzeugen */
semID = semget(1111, 1, IPC_CREAT | 0666);
if(semID >= 0) {
puts("Semaphore. Vor Anfrage\n");
getchar();
/* Bereite die Semaphore vor und starte */
sema.sem_num = 0;
sema.sem_flg = SEM_UNDO;
sema.sem_op = -1;
semop(semID, &sema, 1);
puts("bin im kritischen Bereich\n");
getchar();
sema.sem_op = 1;
semop(semID, &sema, 1);
puts("und nun wieder draußen\n");
}
else {
perror("semget");
}
}