Вопрос
eventfd()
- это новый системный вызов, доступный в Linux с 2.6.22. Подпись звонка
int eventfd(unsigned int initval, int flags);
Я использую этот вызов при создании нового светового меча Lock
класса, который можно использовать в цикле опроса.
Объект Python Lock
запускается в разблокированном состоянии. Мое использование eventfd требует, чтобы начальное значение было ненулевым. Если внутренне значение равно uint64_t
,
Объект содержит
64-битное целое число без знака (uint64_t), которое поддерживается
ядро.
почему аргумент начального значения типа unsigned int
?
Подробная информация
Если я использую ненулевые значения в качестве разблокированного состояния Lock
, выпуски выполняются в письменной форме. Несколько выпусков без промежуточных приобретений ошибочны и требуют сбоя. Это требует сбоя записи, когда объект события содержит ненулевое значение. В режиме по умолчанию объект события будет добавлять значения, отправленные в него, до (uint64_t)0xfffffffffffffffe
, прежде чем блокировать вызовы записи. Чтобы обнаружить эту ситуацию, я сделаю неблокирующую запись, которая выдвигает значение выше этого максимума, вызывая это обстоятельство:
Если добавление вызовет счетчик
значение, превышающее максимальное значение, затем write (2) либо блокирует
пока чтение (2) не будет выполнено для файлового дескриптора или не завершится неудачно
с ошибкой EAGAIN, если дескриптор файла был сделан не
блокировки.