На справочной странице кажется, что даже если вы инициализируете семафор значением 1:
sem_init(&mySem, 0, 1);
Это может быть увеличено до значения больше 1 с несколькими вызовами на
sem_post(&mySem);
Но в этом примере кода комментарий выглядит иначе:
sem_init(&mutex, 0, 1); /* initialize mutex to 1 - binary semaphore */
Можно ли инициализировать строго двоичный семафор в C?
Примечание: причина для того, чтобы сделать это вместо использования мьютекса в этом случае, заключается в том, что sem_post и sem_wait могут вызываться разными потоками.