Отличия семафоров System V и Posix - PullRequest
26 голосов
/ 15 декабря 2008

Каковы компромиссы между использованием System V и семафором Posix?

Ответы [ 4 ]

51 голосов
/ 15 декабря 2008

С О'Рейли :

  • Одна заметная разница между System V и семафором POSIX реализация в том, что в System V Вы можете контролировать, сколько семафор количество может быть увеличено или уменьшено; тогда как в POSIX счетчик семафоров увеличивается и уменьшается на 1.
  • Семафоры POSIX не позволяют манипулировать разрешениями семафора, тогда как семафоры System V позволяют вам изменить разрешения семафоры в подмножестве оригинала разрешение.
  • Инициализация и создание семафоров являются атомарными (от пользователя перспектива) в семафорах POSIX.
  • С точки зрения использования семафоры System V неуклюжи, а POSIX семафоры прямолинейны
  • Масштабируемость семафоров POSIX (с использованием безымянных семафоров) значительно выше, чем семафоры System V. В сценарий пользователь / клиент, где каждый пользователь создает свои собственные экземпляры сервера, было бы лучше использовать POSIX семафоры.
  • Семафоры System V при создании объекта семафора создают массив семафоры, тогда как семафоры POSIX создать только один. Из-за этого особенность, создание семафора (память в системе) дороже в системе V семафоров по сравнению с POSIX семафоры.
  • Говорят, что производительность семафора POSIX лучше, чем Семафоры на основе системы V.
  • Семафоры POSIX предоставляют механизм для семафоров всего процесса, а чем общесистемные семафоры. Итак, если разработчик забывает закрыть семафор, на процессе выхода Семафор очищен. В простом термины, семафоры POSIX обеспечивают механизм непостоянного семафоры.
23 голосов
/ 24 февраля 2013

Две основные проблемы с общими / именованными семафорами POSIX, используемыми в отдельных процессах (не потоках): Семафоры POSIX не предоставляют механизма для пробуждения процесса ожидания, когда другой процесс умирает, удерживая блокировку семафора. Это отсутствие очистки может привести к появлению семафоров-зомби, которые вызовут любой другой или последующий процесс, который пытается использовать их для взаимоблокировки. Также нет способа POSIX перечислить семафоры в ОС, чтобы попытаться идентифицировать и очистить их. В разделе POSIX на SysV IPC указываются инструменты ipcs и ipcrm для просмотра и управления глобальными ресурсами SysV IPC. Для POSIX IPC такие инструменты или даже механизмы не указаны, хотя в Linux эти ресурсы часто можно найти в / shm. Это означает, что сигнал KILL для неправильного процесса в неправильное время может заблокировать всю систему взаимодействующих процессов до перезагрузки.

Другим недостатком является использование семантики файлов для семафоров POSIX. Подразумевается, что может быть несколько общих семафоров с одинаковыми именами, но в разных состояниях. Например, процесс вызывает sem_open, затем sem_unlink перед sem_close. Этот процесс может по-прежнему использовать семафор, так же как отсоединение открытого файла перед его закрытием. Процесс 2 вызывает sem_open для одного и того же семафора между вызовами sem_unlink и sem_close процесса 1 и (согласно документации) получает новый семафор с тем же именем, но в другом состоянии, чем процесс 1. Два общих семафора с тем же именем независимая работа нарушает цель общих семафоров.

Ограничение, указанное выше, делает общие семафоры POSIX непригодными для использования в реальной системе без гарантии того, что неуловимые сигналы никогда не будут отправлены. Ограничение два может быть смягчено тщательным кодированием, предполагая контроль над всем кодом, который будет использовать данный семафор. Честно говоря, более чем удивительно, что они превратили его в стандарт как есть.

10 голосов
/ 12 октября 2012

Я знаю, что это старо, но для тех, кто все еще читает эту любезность Google, я считаю, что причина № 1, которую я нахожу для использования семафоров System V поверх семафоров POSIX (системного уровня), заключается в возможности получения ресурса семафора путь, который автоматически возвращается ядром. НЕТ, КАК ВЫХОДИТ ИЗ ПРОЦЕССА.

Я согласен, что множественные (атомарные) операции семафоров используются редко (хотя они могут быть полезны во время подготовки), и что интерфейс System V является странным, но просто не существует способа надежного достижения той же семантики очистки с помощью Семафоры POSIX.

0 голосов
/ 25 декабря 2010

Интересно, что заставляет людей проектировать плохие API, как семафоры System V ! Если у вас нет очень веских причин использовать семафоры System V (например, атомарные операции с множественным приращением-уменьшением за один шаг), вы должны использовать семафоры с именем POSIX.

В связанной статье обсуждается, что не так и не интуитивно понятно с семафорами System V.

...