Мобильное программирование приложений реального времени в стандарте POSIX

Семафоры реального времени


Семафор реального времени – это эффективный механизм синхронизации процессов, который представляет собой общесистемный разделяемый ресурс, имеющий неотрицательное целочисленное значение.

Основными операциями над семафором являются захват и освобождение. Если делается попытка захвата семафора, когда его значение равно нулю, выполнение вызывающего потока управления приостанавливается и он добавляется к множеству потоков, ждущих на семафоре.

Если при освобождении семафора множество ждущих потоков было непусто, один из них удаляется из этого множества и его выполнение возобновляется; в противном случае значение семафора просто увеличивается.

Семафоры бывают именованными и безымянными. Первые именуются цепочками символов и создаются функцией sem_open() с флагом O_CREAT, вторые создаются функцией sem_init().

Именованный семафор можно закрыть, обратившись к функции sem_close(), и удалить с помощью функции sem_unlink(); для ликвидации неименованных семафоров служит функция sem_destroy().

Для захвата семафоров служат функции sem_wait(), sem_trywait() и sem_timedwait().

Освобождение семафора осуществляется функцией sem_post().

Функция sem_getvalue() позволяет опросить значение семафора, не меняя его состояния.

Необходимо отметить, что описание семафоров реального времени в стандарте POSIX-2001 внутренне противоречиво. В большинстве мест явно написано, что семафоры эти целочисленные; в то же время, из описания функции sem_wait() следует, что имеются в виду бинарные семафоры. Вероятно, ошибочно это последнее описание.



Содержание раздела