Locking semaphores in C problem sys/sem

Posted by Vojtech R. on Stack Overflow See other posts from Stack Overflow or by Vojtech R.
Published on 2010-04-29T16:32:26Z Indexed on 2010/04/29 22:37 UTC
Read the original article Hit count: 422

Filed under:
|

Hi,

I have problem with my functions. Sometimes two processes enter into critical section. I can't find problem in this after I spent 10 hours by debugging. On what I should aim?

    // lock semaphore
    static int P(int sem_id)
    {
        struct sembuf sem_b;
        sem_b.sem_num = 0;
        sem_b.sem_op = -1; /* P() */
        sem_b.sem_flg = 0;
        if (semop(sem_id, &sem_b, 1) == -1) {
        print_error("semop in P", errno);
        return(0);
        }
        return(1);
    }

    // unlock semaphore
    static int V(int sem_id)
    {
        struct sembuf sem_b[1];
        sem_b.sem_num = 0;
        sem_b.sem_op = 1; /* V() */
        sem_b.sem_flg = 0;
        if (semop(sem_id, &sem_b, 1) == -1) {
            print_error("semop in V", errno);
            return(0);
        }
        return(1);
    }

The action loop:

int mutex;
if ((mutex=semget(key, 1, 0666))>=0) {
    // semaphore exists
}
while(1) {
        P(mutex);   
        assert(get_val(mutex)==0);
        (*action)++;
        V(mutex);
}   

Many thanks

© Stack Overflow or respective owner

Related posts about c

    Related posts about semaphore