Шрифт:
30.7. Сервер TCP с предварительным порождением процессов и защитой вызова accept блокировкой файла
Описанная выше реализация, позволяющая нескольким процессам вызывать функцию
Причины возникновения этой проблемы с библиотечной версией функции accept в SVR4 связаны с реализацией потоков STREAMS и тем фактом, что библиотечная функция accept не является атомарной операцией. В Solaris 2.6 эта проблема решена, но в большинстве реализаций SVR4 она остается.
Решением этой проблемы является защита вызова функции
Существует несколько способов реализации защиты вызова функции
Единственным изменением в функции
2
Стивенс У. UNIX: взаимодействие процессов. — СПб.: Питер, 2002.
Функция
В листинге 30.12 показана наша функция
Листинг 30.12. Функция my_lock_init: блокировка файла