2017-01-26 17 views
-1

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

Вы можете защитить его, используя монитор java (например, синхронизированные методы).

Но что делать, если ваши классы должны подчиняться этому протоколу?

метод запрос - критический раздел - метод конечного

Любого процесса является единственным одновременным выполнением запроса и конечных методов, благодаря синхронизированным блокам, но что ядро ​​критической секции?

Использование других конструкций, таких как Семафоры или Блокировка/Условие, вы можете сделать это легко, но с помощью собственного монитора вы связаны с тем, что синхронизация идентифицируется блоком, который не может пересекать несколько методов.

Если вы используете boolean, который сообщает вам, занят ли ресурс (сразу после вызова wait()) или нет, может возникнуть взаимоблокировка!

Итак, что может быть хорошим решением для этого?

+7

Вы определенно должны выглядеть разделить на это на две отдельные вопросы вместо этого. Вы можете задать один вопрос здесь, чтобы спросить, и оставить другого на несколько позже. – Makoto

+0

Вы можете даже отправить другой в одно и то же время. –

+1

Сделайте что-нибудь -> вызовите синхронный метод для вашего критического раздела -> Сделайте материал – user2677821

ответ

0

Представьте себе ситуацию, когда ...

Там есть имя, что это длинные транзакции, и если вы думаете, что вам нужно реализовать, это признак того, что это может быть время передумайте свой дизайн.

Почему это плохо, и как избежать этой темы на уровне книги.

Вот одна книга, которая охватывает его довольно хорошо:

https://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420