В чем разница между семафором и критической областью? - PullRequest
3 голосов
/ 25 августа 2010

единственное, что я понял, это

  • Семафор это примитивный способ
  • критическая область имеет переменную GUARD (семафор также имеет, но имя не GUARD!)

??

так в чем же разница?

Ответы [ 4 ]

5 голосов
/ 25 августа 2010

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

2 голосов
/ 26 августа 2010

GUARD будет позволять только 1 потоку входить в критическую область одновременно, тогда как семафор может позволять n потокам (вы указываете n) одновременно входить в критическую область.

1 голос
/ 14 сентября 2011

Когда процесс выполняет код, который управляет общими данными (или ресурсами), мы говорим, что процесс находится в критической секции (CS) (для этих общих данных) и семафор является неотрицательной целочисленной переменной, используемой в качестве флага и Сигналы, если и когда ресурс свободен

0 голосов
/ 04 августа 2011

Существует две интерпретации «критической области»:

  1. Область кода, которая будет давать неопределенные результаты при одновременном выполнении двумя потоками.

  2. Область кода, выделенная из всех исполнителей, кроме текущего потока .Примером этого может быть обработчик прерываний.Эти регионы чаще называют «критическими секциями».На процессорах Intel вы можете начать / завершить критический раздел с помощью инструкций CLI / STI.

...