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