zProgrammer
zProgrammer

Reputation: 739

C- Semaphore sem_getvalue not returning what I'm expecting?

I've been trying to get myself more acquainted with semaphores and was wondering why this code isn't printing the value I expect.

#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[]) {
    sem_t sem;
    sem_init(&sem, 0, 1);
    int value;
    sem_getvalue(&sem, &value);
    printf("%d\n",value);

    return 0;
}

It prints 0 for the value. But from my understanding it should be getting the value I initialized the semaphore with which is 1? I tried using a semaphore in some code with pthreads and I initialized the semaphore with a value of 1, but when I called the sem_getvalue function it was printing 32767. Am I missing something here? Thanks in advance.

Edit: sem_init and sem_getvalue both return -1

Edit: Solved. It appears unnamed semaphores aren't implemented on Mac.

Upvotes: 5

Views: 29511

Answers (3)

Edit: Solved. It appears unnamed semaphores aren't implemented on Mac.

POSIX semaphore is considered as deprecated on Mac OSX. So, it doesn't work on it as expected.

Upvotes: 2

Eric
Eric

Reputation: 24876

It should return 1, which is the value you init,
when compile should add -pthread as option, e.g. gcc -pthread test.c

If the code runs well, then both sem_init() and sem_getvalue() should return 0,
if they return -1 then there is some error, you should get error flag, and check man page on linux to see what error happend.

By the way, your code return 1 on my linux, which is correct.
The man page: man sem_init and man sem_getvalue.
You should get error flag for sem_init(), then check man sem_init first, because the semaphore seems not properly created in the first place.

Upvotes: 1

user207064
user207064

Reputation: 665

I'm getting the output as expected. (i.e. 1)

try using linking with pthread library

gcc sema.c -lpthread

Upvotes: 5

Related Questions