Veröffentlicht 8. Januar 200619 j Hi, ich habe da ein kleines Problem. Das theoretische Prinzip von Semaphoren habe ich verstanden. Allerdings komme ich mit der C-Implementierung nicht so richtig klar. 1. Wie führe ich eine einfache P- und eine V-Operation durch? 2. Da ich mehr als ein Semaphor benötige: Kann ich zwei Semaphoren (werden in versch. Kontexten bebraucht) in einer Gruppe anlegen (mittels semget(..., 2, ...))?
8. Januar 200619 j Hi, ich habe da ein kleines Problem. Das theoretische Prinzip von Semaphoren habe ich verstanden. Allerdings komme ich mit der C-Implementierung nicht so richtig klar. 1. Wie führe ich eine einfache P- und eine V-Operation durch? 2. Da ich mehr als ein Semaphor benötige: Kann ich zwei Semaphoren (werden in versch. Kontexten bebraucht) in einer Gruppe anlegen (mittels semget(..., 2, ...))? Hallo, zu 1.: V-Operation: #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int v(int semaid) { struct sembuf semabuffer[1]; semabuffer[0].sem_num = 0; semabuffer[0].sem_op = 1; semabuffer[0].sem_flg = SEM_UNDO; return semop(semaid,semabuffer,1); } P-Operation: include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int p(int semaid) { struct sembuf semabuffer[1]; semabuffer[0].sem_num = 0; semabuffer[0].sem_op = -1; semabuffer[0].sem_flg = SEM_UNDO; return semop(semaid,semabuffer,1); } 2. Wie meinst du das? int semget(key_t key, int nsems, int semflg); key = "Name von Semaphore" nsems = Anzahl an Semaphoren semflg = Zugriff auf Semaphor Wenn du mehrer Semaphore unter verschiedenen Namen brauchst dann so: int meinkey1, meinkey2; meinkey1=semget(MEINKEY1,1,IPC_CREAT|0666); meinkey2=semget(MEINKEY2,1,IPC_CREAT|0666); Ich hoffe es hat dir etwas geholfen..
9. Januar 200619 j Autor Danke, ich habe bei mir den Fehler an einer anderen Stelle gehabt. Ich habe vor der ersten P-Operation, den Semaphor nicht sinnvoll vorbelegt. Deswegen wurde die Verarbeitung gleich an dieser Stelle blockiert.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.