Мониторы и взаимное исключение - PullRequest
1 голос
/ 10 февраля 2012

Просто хотел узнать, находится ли взаимное исключение в мониторах на уровне процедуры / метода или на уровне монитора.

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

Если предположить, что он находится на уровне монитора, он выглядит намного безопаснее.Однако, не существует ли ситуаций, в которых может запускать 2 разных потока в мониторе, каждый из которых изменяет разные общие переменные, и монитор не допустит этого?Если это так, не снизит ли это параллелизм в системе?Или это будет означать, что 2 монитора должны были созданы вместо одного?

Хорошо, я лучше закончу философствовать :) Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Механизм работы монитора - сериализация потоков или процессов.Поэтому Monitor - это умение гарантировать взаимное исключение в ситуации параллелизма.

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

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

Если вы не хотитеиспользуйте несколько мониторов.

...