Как происходит мьютекс или семафор? - PullRequest
2 голосов
/ 10 февраля 2011

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

Ответы [ 3 ]

6 голосов
/ 12 февраля 2011

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

Вместо этого мьютекс или семафор уведомит планировщик о том, что поток ожидает, и, следовательно, принять егоиз списка "готов к запуску".Затем, когда мьютекс разблокирован или сигнализирован семафор, реализация либо

  1. попросит планировщика разбудить один из ожидающих потоков по усмотрению планировщика, либо

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

Первый вариант является предпочтительным вариантом реализации, но не всегда доступен.Второе часто называют подходом «гремящего стада»: если ожидается 1000 потоков, то просыпаются все 1000 (большое грохочущее стадо потоков), и только 999 человек возвращаются в спящий режим.Это бесполезно расходует ресурсы ЦП, и реализации по возможности будут избегать этого.

0 голосов
/ 10 февраля 2011

Да, простое объяснение состоит в том, что любой ожидающий процесс (будь то семафор или ввод / вывод) отбирается из очереди выполнения планировщика, пока не будет выполнено условие ожидания.

0 голосов
/ 10 февраля 2011

Это во многом зависит от реализации.Говоря об этих вещах, мы обычно ссылаемся на потоки, которые могут иметь поддержку операционной системы или могут быть полностью реализованы на языке и, таким образом, даже не взаимодействуют с O / S для поддержки потоков.

Ониоднако может также ссылаться на процессы, но эти реализации обычно требуют сложных шаблонов передачи сообщений, в дополнение к некоторой поддержке O / S для управления процессами.

...