...
Если роботы должны обрабатывать ресурсы из одной и той же очереди, то без дополнительных ограничений они начнут брать в работу одни и те же ресурсы. Чтобы такое не происходило, можно использовать механизм блокировок ресурсов.
Подсказка |
---|
В целом он работает следующим образом: - Робот 1 читает 1-й ресурс и при этом сразу его блокирует для других роботов.
- 1-й ресурс уже заблокирован Роботом 1, поэтому Робот 2 не сможет его получить и начнет читать 2-й ресурс. И также заблокирует 2-й ресурс для других роботов.
- Робот 1 заканчивает работу с 1-м ресурсом и устанавливает ему статус "Обработан".
- Робот 1 ищет следующий ресурс. 2-й ресурс уже заблокирован Роботом 2, поэтому Робот 1 не сможет его получить и начнет читать 3-й ресурс, блокируя его для других роботов.
- Робот 2 заканчивает работу со 2-м ресурсом и устанавливает ему статус "Обработан".
- Робот 2 ищет следующий ресурс:
- 1-й ресурс уже в статусе "Обработан", поэтому Робот 2 его не найдет
- 3-й ресурс уже заблокирован Роботом 1, поэтому Робот 1 не сможет его получить
В итоге Робот 2 начнет читать 4-й ресурс, блокируя его для других роботов. - И т.д.
|
Таким образом, два робота последовательно обрабатывают ресурсы очереди, не пересекаясь друг с другом.
Тот, кто устанавливает блокировку, является ее инициатором. Есть несколько правил относительно инициаторов:
...