CMU: семафоры - PullRequest
       47

CMU: семафоры

3 голосов
/ 06 сентября 2010

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

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

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

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

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

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

1 Ответ

0 голосов
/ 06 сентября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...