Мьютексы против мониторов - сравнение - PullRequest
2 голосов
/ 06 октября 2011

Из того, что я узнал о мьютексах, они обычно обеспечивают возможность блокировки общих ресурсов. Поэтому, если новый поток хочет получить доступ к этому заблокированному общему ресурсу - он либо завершает работу, либо должен постоянно опрашивать блокировку (и тратит время процессора на ожидание блокировки).

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

Будет ли это единственным преимуществом мониторов перед мьютексами (или любым общим механизмом блокировки без условных переменных)?

Ответы [ 2 ]

5 голосов
/ 26 октября 2011

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

Таким образом, в некоторых случаях мониторы просто перебивают из-за простой блокировки / разблокировки, но в большинстве случаев мьютексов одних недостаточно, поэтому вы видите, что они используются с одной или несколькими переменными условия - концептуально используя Эквивалент мониторов.

1 голос
/ 28 апреля 2013

Я думаю, что монитор блокирует объект (многопоточность не может одновременно получить доступ к объекту.) В то время как мьютекс блокирует процесс (многопоточность может пройти только один процесс.)

...