Avatar billede kube Nybegynder
22. oktober 2002 - 11:26 Der er 12 kommentarer og
1 løsning

semaphore

hej Eksperter - kan ikke rigtigt få lavet en wait på min semaphore, der sker det at den hele tiden retunere 0 og derved ikke decrementere semaphoren.
Hvad går galdt ved semop()!!

int semaphore_v(){ //wait
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = -1;
sem_b.sem_flg = SEM_UNDO;
if(semop(sem_id, &sem_b, 1) == -1){
printf("fejl ved wait");
return 0;
}
return 1;
}


mvh kube
Avatar billede chries Nybegynder
22. oktober 2002 - 11:36 #1
hvad står errno til ?

The semop() function will fail if:
[E2BIG]
The value of nsops is greater than the system-imposed maximum.
[EACCES]
Operation permission is denied to the calling process, see IPC.
[EAGAIN]
The operation would result in suspension of the calling process but (sem_flg&IPC_NOWAIT) is non-zero.
[EFBIG]
The value of sem_num is less than 0 or greater than or equal to the number of semaphores in the set associated with semid.
[EIDRM]
The semaphore identifier semid is removed from the system.
[EINTR]
The semop() function was interrupted by a signal.
[EINVAL]
The value of semid is not a valid semaphore identifier, or the number of individual semaphores for which the calling process requests a SEM_UNDO would exceed the system-imposed limit.
[ENOSPC]
The limit on the number of individual processes requesting a SEM_UNDO would be exceeded.
[ERANGE]
An operation would cause a semval to overflow the system-imposed limit, or an operation would cause a semadj value to overflow the system-imposed limit.
Avatar billede kube Nybegynder
22. oktober 2002 - 12:19 #2
errno er 22.
men jeg har ikke styr på alle de fejl nr. - hvad tror du der sker der er forkert?
Avatar billede kube Nybegynder
22. oktober 2002 - 12:29 #3
af dem du har skrevet er det EINVAL
Avatar billede chries Nybegynder
22. oktober 2002 - 12:45 #4
der er to mugliheder:
1. du giver for mange semaporer med ( side n det kun er en, er det nok ikke den)
2. id'en er forkert (sem_num)
Avatar billede chries Nybegynder
22. oktober 2002 - 12:46 #5
eller sem_id, er ikke lige sikker :-)
Avatar billede chries Nybegynder
22. oktober 2002 - 12:55 #6
Avatar billede kube Nybegynder
22. oktober 2002 - 13:06 #7
kigger lige..
Avatar billede kube Nybegynder
22. oktober 2002 - 13:16 #8
sem_id = semget(key, 1, 0)); FRA DIT LINK
sem_id = semget((key_t)1234, 1, 0666 | IPC_CREAT); MIN KODE
jeg går ud fra det er her min kode omkring sem_id går galt, men hvad skal ændres?
Avatar billede kube Nybegynder
22. oktober 2002 - 13:18 #9
er det omkring hvad der kan læses eller exekveres? eller hvaz
Avatar billede chries Nybegynder
22. oktober 2002 - 13:23 #10
kommer an på hvor du læser =), jeg ved ikke særlig meget om det, jeg læser mig til de ting jeg kommer med:

        key_t key;
        int semid;
        union semun arg;

        if ((key = ftok("semdemo.c", 'J')) == -1) {
            perror("ftok");
            exit(1);
        }

        /* create a semaphore set with 1 semaphore: */
        if ((semid = semget(key, 1, 0666 | IPC_CREAT)) == -1) {
            perror("semget");
            exit(1);
        }

        /* initialize semaphore #0 to 1: */
        arg.val = 1;
        if (semctl(semid, 0, SETVAL, arg) == -1) {
            perror("semctl");
            exit(1);
        }
Avatar billede kube Nybegynder
22. oktober 2002 - 20:34 #11
jeg fik lavet lidt om hist oh her ud fra linket og nu virker det. Det er et knald godt link idet koden er meget simplificeret hvilket gør overskueligheden og forståelsen af koden i top.
Jeg takker for hjælpen - chries
Avatar billede kube Nybegynder
22. oktober 2002 - 20:35 #12
laver du et svar?
Avatar billede chries Nybegynder
23. oktober 2002 - 08:41 #13
Ingen problem :-)
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