Ответ 1
Используйте Семафор POSIX, вместо этого вместо (См. ниже) Используйте 1
.sem_init
для неназванные семафоры или sem_open
для названных.
sem_t sem;
/* initialize using sem_init or sem_open */
sem_wait(&sem);
/* critical region */
sem_post(&sem);
Спустя много лет после первоначального размещения этого ответа он должен быть обновлен.
Мьютексы должны использоваться вместо семафоров. Комментарии R и kuga (скопированные дословно ниже) объясняют почему. В частности, я нахожу, что kuga упоминает, что мьютексы могут быть post
отредактированы с помощью их фиксирующей нити наиболее привлекательными.
R
sem_init требует, чтобы ненулевой аргумент pshared был общим, как и mutex потребует атрибут pshared. Нет причин предпочитать семафоров над мьютексами для этого, и на самом деле мьютексы будут лучше потому что вы можете использовать надежный мьютекс, который позволяет обрабатывать (очень реальный!) случай, когда один процесс умирает, удерживая замок.
Kuga
В дополнение к сообщению R.., мьютекс может быть отправлен только потоком который блокирует его. Это часто требуется, и семафор не предоставляет эта особенность. Так что это не правильный ответ, ответ Джеффа должен быть помечены как правильный ответ.