Проверьте мое понимание семафоров, пожалуйста!CMU: Семафоры
Я понимаю идею подсчета семафоров и двоичных семафоров. Однако разница между спин-блокировкой и семафором реализована с помощью сигнала() и вида wait() для меня.
Например, спин-блокировка имеет в основном два значения (двоичное значение true/false для блокировки или разблокировки). Поэтому спин-блокировка в основном представляет собой двоичный семафор, правильно?
Любой процесс, пытающийся войти в критический раздел, когда другой процесс находится внутри, будет неспособен, пока он заблокирован, и будет вращаться и постоянно проверять статус блокировки до тех пор, пока он не будет разблокирован, а затем сможет ввести и заблокировать его.
Семафор, использующий функцию signal() и wait(), существенно добавляет или вычитает значение из какой-либо переменной. Существует ограничение относительно критического раздела. Он будет открыт, только если переменная имеет какую-то ценность. Пример реализации для потребительского процесса будет ждать (полный), а затем, когда он будет заполнен, он будет выполняться, а в конце - сигнал (пустой). В то время как процесс продюсера может ждать (пустой) и выполнять, когда пустым является true, а затем, когда он заканчивает его, сигнал (полный).
В чем разница между wait() и спин-блокировкой, которая по существу «ждет» в цикле?
+1, потому что я часто путаюсь об этих понятиях сами. – teukkam
Спасибо, это действительно сложная тема. Я много читал, и мне кажется, что чем больше я читаю, тем больше меня смущает! –