2010-09-06 3 views
3

Проверьте мое понимание семафоров, пожалуйста!CMU: Семафоры

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

Например, спин-блокировка имеет в основном два значения (двоичное значение true/false для блокировки или разблокировки). Поэтому спин-блокировка в основном представляет собой двоичный семафор, правильно?

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

Семафор, использующий функцию signal() и wait(), существенно добавляет или вычитает значение из какой-либо переменной. Существует ограничение относительно критического раздела. Он будет открыт, только если переменная имеет какую-то ценность. Пример реализации для потребительского процесса будет ждать (полный), а затем, когда он будет заполнен, он будет выполняться, а в конце - сигнал (пустой). В то время как процесс продюсера может ждать (пустой) и выполнять, когда пустым является true, а затем, когда он заканчивает его, сигнал (полный).

В чем разница между wait() и спин-блокировкой, которая по существу «ждет» в цикле?

+0

+1, потому что я часто путаюсь об этих понятиях сами. – teukkam

+0

Спасибо, это действительно сложная тема. Я много читал, и мне кажется, что чем больше я читаю, тем больше меня смущает! –

ответ

1

В отличие от семафоров, спин-блоки могут использоваться в коде, который не может спать, например, обработчиках прерываний.

http://www.makelinux.net/ldd3/chp-5-sect-5.shtml

http://www.linuxjournal.com/article/5833

+0

Как я понимаю, спин-блоки не должны использоваться в одной системе ЦП, если она не поддерживает упреждающее ядро, если у него нет упреждающего ядра, не рекомендуется использовать спин-блокировку. Спин-блокировка должна отключать прерывания, когда критический раздел читается/записывается, правильно? // отредактировано –

+0

@Google извините, я мало знаю о невосприимчивых ядрах – Anycorn

Смежные вопросы