2012-05-04 2 views
5

Я читал про мьютексы, семафоры и критические разделы. Я понимаю, что мьютекс синхронизирует ресурс, так что только один поток обращается к нему за раз, когда семафор позволяет конкретному потоку получить доступ к ресурсу, но что делают критические разделы?Что такое критические разделы в потоках

+0

Вы говорите о Windows или вообще? –

+7

Прочтите это - http://en.wikipedia.org/wiki/Critical_section, а затем вернитесь с более конкретным вопросом, если это все еще не имеет смысла. –

+0

Мне кажется, прочитав эту статью в Википедии, что семафоры и критические разделы одинаковы? – Rajeshwar

ответ

13

При нормальном использовании критический раздел представляет собой раздел кода, который должен выполняться серийно - то есть только один поток может выполнять этот код в любой момент времени. Обычно вы выполняете это, защищая код с помощью семафора мьютекса.

В языке Windows критический раздел представляет собой структуру данных (и несколько связанных функций), которые реализуются на семафоре мьютексов, специфичных для процесса (т. Е. Тот, который используется только для блокировки между потоками в одном процессе, а не между отдельными процессами).

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

+0

Спасибо, что имеет смысл – Rajeshwar

+0

Является «семафором мьютекса» тем же, что и «двоичный семафор» (есть связанный [вопрос SO] (http://stackoverflow.com/questions/62814/difference-between-binary-semaphore и-мьютекс))? Иногда терминология может сбивать с толку. –

+0

Нет, два не совсем то же самое. Заблокированный мьютекс можно разблокировать только тем, кто ранее заблокировал его. Заблокированный двоичный семафор может быть разблокирован кем угодно. –

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