vi har siddet og kodet et program, hvor vi skal bruge semafor... det virker ikke helt efter hensigten, derfor ville vi gerne have forklaret hvad det egentlig helt præcist er der sker i nedenstående kode....
Jeg har ingen ide om hvad der sker, eller skulle ske.
Hvilket system kører det på? Det ligner ikke en udgave af semafor jeg har set før.
Det hjælper ikke at "polle", folk svarer nok når de kommer forbi. Der er folk der laver andet end vente på at "få lov" til at svare på spørgsmål på eksperten. F.ex. er jeg sjældent "på" før ca. 20.00.
sem_id = semget((key_t)1234, 250, 0666 | IPC_CREAT); opretter id for hver semafor med en adr. nøgle, næste kan jeg ikke huske, og skriverettigheder. Det er ikke sikkert at det er nødvendigt at erklære IPC_CREAT (det står i Linuxbogen) da det er sjældent at denne bruges.
if(sem_id == -1) { printf("Kunne ikke oprette semafor saet \n"); exit(0); } Chekker om der opstår en fejl ved oprettelsen af semafor id - hvis ja afsluttes programmet.
for(semnr = 1; semnr < 250; semnr++) { //if(semnr == 242 || semnr == 243) // sem_union.val = 5; //else sem_union.val = 1; mener jeg tager den union værdi (se længere oppe i eksemplet med "Dining Philosophers" hvor "union semum" erklæres) og opretter semaforer ud fra de kriterier der er givet der.
if(semctl(sem_id, semnr, SETVAL, sem_union) == -1) { printf("Fejl ved semafor nr %d \n", semnr); exit(0); } kan jeg ikke lige forklare på stående fod men vender gerne tilbage om et par timer med et svar;) men umiddelbart tager den de værdier der erklæres i semctl og chekker for fejl.
if(semctl(sem_id, semnr, SETVAL, sem_union) == -1) { printf("Fejl ved semafor nr %d \n", semnr); exit(0); } semctl() giver direkte kontrol med semaforerne ud fra de værdier der er angivet. sem_id og semnr giver sig selv, SETVAL initialiserer semaforen til at modtage en værdi og sem_union er der værdien komme fra. Hvis der opstår en fejl udskrives der en fejl på skærmen.
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.