Я реализую семафор на языке c. У меня есть семафор подсчета POSIX. Я хочу присвоить ему значение. и я не хочу использовать Wait или Post. Я могу это сделать? Есть ли какая-либо функция типа setValue для POSIX Semaphore?Как установить значение семафора POSIX в 1?
ответ
Wait and Post - это единственные операции, поддерживаемые классическим семафором. Семафоры POSIX могут быть инициализированы с помощью count с помощью sem_init(). Любая функция 'setValue' разрушает функциональность семафора, позволяя единицам «потеряться», например. будучи отправлен одним потоком перед тем, как «setValue» был вызван другим.
Это действительно плохая идея, поэтому она не реализована.
Если вы можете изменить свое значение при нормальной работе (то есть, за исключением инициализации), это не будет семафором. Таким образом, вы можете искать что-то другое, возможно, потокобезопасную счетчик/общую переменную? Такие более сложные общие объекты обычно реализуются с помощью основных примитивов синхронизации, таких как locks/mutex/semaphore/etc. Что использовать зависит от того, что вы хотите реализовать.
OTOH, вы, возможно, представляете XY-problem. Возможно, если вы укажете, чего вы на самом деле хотите достичь, мы можем указать вам на лучшее/более простое решение.
- 1. POSIX: значение семафора после выхода из sem_wait()
- 2. Значение семафора, инициализированное -1?
- 3. с использованием счетчика семафора POSIX в виде двоичного семафора
- 4. Как определить приоритет процесса блокировки posix-семафора?
- 5. Доля семафора POSIX среди нескольких процессов
- 6. Как использовать semctl установить значение семафора го в наборе семафоров
- 7. как знать значение питона семафора
- 8. Как установить «posix» в windows
- 9. как установить POSIX в PHP
- 10. Значение неинициализированного семафора
- 11. Будут ли сигналы передаваться программе, заблокированной с помощью семафора POSIX?
- 12. Опрос семафора несколько раз с использованием posix C
- 13. семафор беда POSIX
- 14. Значение семафора больше, чем инициализированное значение
- 15. Приращение значения POSIX семафоров более чем на 1
- 16. Как проверить значение семафора с помощью оператора '=='?
- 17. Каково значение начального значения семафора?
- 18. Значение атомарности POSIX pipe
- 19. Уникальное значение в потоке POSIX
- 20. Как установить значение для Zend_Form_Element_Submit (zendframework 1)
- 21. Rails4: Как установить максимальное значение + 1
- 22. Не удалось установить posix-spawn
- 23. НПМ не может установить POSIX
- 24. инициализация семафора
- 25. Использование sys/sem.h в C, Как получить значение семафора?
- 26. Ошибка семафора
- 27. Как установить строку в -1?
- 28. Как установить значение proj_id как max (proj_id) + 1 в java
- 29. Понимание Семафора в C
- 30. реализация семафора
['sem_init (3)'] (http://linux.die.net/man/3/sem_init) –
@ FilipeGonçalves: Вызов 'sem_init' на уже инициализированный семафор приводит к неопределенному поведению. Вы можете сначала уничтожить его, но если одновременные сообщения или ожидания возможны, когда вы его уничтожаете, это также приводит к неопределенному поведению. В основном то, что просит ОП, просто безнадежно неправильно. –