Avatar billede kube Nybegynder
26. oktober 2002 - 13:31 Der 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!!)

mvh kube
Avatar billede kube Nybegynder
26. oktober 2002 - 13:51 #1
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)
Avatar billede freddy04 Nybegynder
26. oktober 2002 - 22:16 #2
tror du bør vise noget kode :-)
Avatar billede swaq Nybegynder
27. oktober 2002 - 21:44 #3
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)
Avatar billede kube Nybegynder
28. oktober 2002 - 16:17 #4
kigger på det..
Avatar billede kube Nybegynder
28. oktober 2002 - 16:48 #5
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.
Avatar billede kube Nybegynder
28. oktober 2002 - 17:07 #6
jeg prøvede at ændre hvor jeg erklærede semid'et og det virkede...
Avatar billede swaq Nybegynder
28. oktober 2002 - 17:15 #7
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!!!!
Avatar billede swaq Nybegynder
29. oktober 2002 - 08:50 #8
Tak fordi du afviste svaret og gav dig selv pointene!
Avatar billede razor Nybegynder
07. december 2002 - 12:47 #9
(undskyld den lange svartid)

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 :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester