Мониторы и взаимное исключение

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

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

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

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


person Mosty Mostacho    schedule 09.02.2012    source источник


Ответы (2)


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

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

person SLaks    schedule 09.02.2012

Механизм работы монитора — сериализация потоков или процессов. Таким образом, Monitor — это навык, гарантирующий взаимное исключение в ситуации параллелизма.

person ganadara    schedule 30.03.2012