26. oktober 2002 - 13:31Der er
8 kommentarer og 1 løsning
semaphore id bliver ændret!
Hej Eksperter.. er der nogen logisk forklaring på hvorfor mit semaphore id der returnes fra funktionen "semget" bliver decrementeret fra jeg tæller semaphoren ned (wait) - til jeg tæller semaphoren op (signal). - Efter hvad jeg kan se kommer de forskellige processer ind i den kritiske sektion selvom en process har talt semaphoren ned! Jeg har lavet en header fil som jeg includer og kalder så funktionerne wait og signal - og det virker fint et andet sted i programmet, men bare ikke et bestemt sted. Hvad kan gå ind og ændre dette semaphore id? - Er det noget internt i programmet? (det er mærkeligt for det virker jo et sted!!)
det andet sted i programmet hvor det virker har jeg også udskrevet semphore id'et ved wait og signal og der er semaphore id'et det samme! (altså det forventede resultat)
husk semctl(...,SETVAL,...) se i linuxbogen, he he den initialiserer dine semaphore (altså giver den en værdi) og det er her du skal angive "sem_b.val = 0" (den er talt ned fra start af, ellers 1) Se i øvrigt filosof.c eksemplet (ligger på DIVE)
semaphoren initialiseres rigtigt og der kan laves wait (down) på den, men det jo klart at når sem_id'et er blevet ændret at man ikke kan lave signal (up) på den når det sem_id ikke er blevet initialiseret. Og det er fordi sem_id'et ændres helt uden grund at det går galdt.
Prøv at vis lidt kode, husk kun at vise det princippielle... Det virker mærkeligt at dit sem_id bliver ændret... Du skal naturligvis huske at lave en union med semaphor structen (se igen filosof.c) Her er et eksempel, hvor structen ligger i en headerfil der hedder: "semaphor_header.h" *** union semaphor_header semafor_union; //Nu kan du nede i din main initialisere semaforen: semafor_union.val = 1; //semaforen initialiseres til 1 fra start af int sem_id; sem_id = semget((key_t)1234,1,0666,IPC_CREAT); semctl(sem_id,0,SETVAL,semafor_union); *** Hav up og down sat til at modtage dit sem_id et voilá int up(int sem_id) int down(int sem_id) Husk at du skal forke dine processer EFTER du har gjort ovenstående... På den måde "arver" de alle det sem_id!!!!
Kube: Jeg er overbevist om at swaq har brugt mere eller mindre tid på at hjælpe dig med dit problem. Hvis du ser det fra hans synspunkt virker det _meget_ egoistisk blot at afvise fuldstændig. Det plejer at være normal kotume at man giver de svarene et lille symbolsk pointsantal for deres tid de forsøgte at hjælpe dig. Det kunne fx. være 10 points eller blot 5. Husk dette til en anden gang :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.