PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Semaphore


deetee
30.05.2006, 11:24
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.


#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");
}
}


deetee
01.06.2006, 13:38
ok, diese Zeile muss in den if Block rein:

semctl(semID, 0, SETVAL, 1);