Понимание семафоров

Я читаю о семафорах в «Концепции операционных систем» (для тех из вас, кто это знает), и мне казалось, что я полностью понимаю семафоры, пока не прочитал этот отрывок:

Важнейшим аспектом семафоров является то, что они выполняются атомарно. Мы должны гарантировать, что никакие два процесса не могут одновременно выполнять операции ожидания и сигналов на одном и том же семафоре.

А также:

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

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

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

Хотел бы прочитать любые разъяснения ...


person yotamoo    schedule 03.05.2012    source источник


Ответы (5)


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

С семафорами вы можете использовать различные варианты, такие как подсчет семафоров, поэтому идея о том, что только один процесс может получить доступ к ресурсу, не всегда верна. Вы можете заблокировать запись в один процесс или поток, но разрешить чтение из нескольких (блокировки чтения / записи).

Предлагаю вам взглянуть на статью в Википедии по этому поводу. На самом деле это неплохо.
http://en.wikipedia.org/wiki/Semaphore_%28programming%29

person Lucas Holt    schedule 03.05.2012

Атомарность - это то, как вы реализуете взаимное исключение. Допустим, вы хотите, чтобы только один поток одновременно вводил критический раздел кода. Как ты это делаешь? Ну у вас есть индикатор "заблокировано / разблокировано". И вы заставляете поток изменить индикатор с «разблокирован» на «заблокирован» до того, как он войдет в критическую часть кода.

Но что мешает двум потокам видеть, что индикатор «разблокирован», оба одновременно переключают его на «заблокирован», а затем оба одновременно выполняют критическую часть кода? И ответ в том, что операция переключения из «разблокированного» в «заблокированный» должна быть атомарной. То есть, это должно происходить сразу, чтобы два потока не смогли изменить индикатор на «заблокирован».

person David Schwartz    schedule 03.05.2012

Речь идет о реализации семафоров, а не об их использовании. Если оборудование поддерживает атомарные операции, такие как семафоры, они будут использоваться, когда пользователь вызывает _1 _ / _ 2_. Если оборудование не поддерживает это, реализация семафора сама найдет другие способы обеспечить такую ​​же функциональность.

Это прозрачно для пользователя, за исключением того, что системы без такой поддержки будут дольше вызывать Signal и Wait. (Кроме того, большинство, если не все современные аппаратные платформы поддерживают атомарные операции для семафоров.)

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

person robert    schedule 03.05.2012

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

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

Источник:

person Durai Amuthan.H    schedule 15.02.2014

Я задал тот же вопрос профессору в классе, и он ответил: «Думайте о семафорах как о молотке, и если у вас есть молоток, вы можете делать с ним много вещей, тогда как с атомарной поддержкой аппаратного или программного решения. к взаимному исключению, например Peterson или Bakery, ограничено ".

person Ugur Sportsdata    schedule 18.04.2013