Как установить значение семафора POSIX в 1?
Я реализую семафор на языке c. У меня есть семафор подсчета POSIX. Я хочу присвоить ему значение. и я не хочу использовать Wait или Post. Могу ли я сделать это? Есть ли какая-нибудь функция типа setValue для семафора POSIX?
2 ответа
Если бы вы могли напрямую изменить его значение во время нормальной работы (т.е. за исключением инициализации), он больше не был бы семафором. Таким образом, вы можете искать что-то другое, может быть, потокобезопасный счетчик / переменную общего доступа? Такие более сложные разделяемые объекты обычно реализуются с помощью базовых примитивов синхронизации, таких как locks/mutex/semaphore/etc. Что использовать, зависит от того, что вы хотите реализовать.
OTOH, вы, возможно, представляете проблему XY. Возможно, если вы укажете, чего вы на самом деле хотите достичь, мы можем указать вам лучшее / более простое / решение.
Wait и Post - единственные операции, поддерживаемые классическим семафором. Семафоры POSIX можно инициализировать с помощью счетчика, используя sem_init(). Любая функция 'setValue' будет разрушать функциональность семафора, позволяя 'потерять' модули, например. будучи опубликованным одним потоком непосредственно перед тем, как setValue был вызван другим.
Это действительно плохая идея, поэтому она не реализована.