Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

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

Подсказка

В целом он работает следующим образом:

  1. Робот 1 читает 1-й ресурс и при этом сразу его блокирует для других роботов.
  2. 1-й ресурс уже заблокирован Роботом 1, поэтому Робот 2 не сможет его получить и начнет читать 2-й ресурс. И также заблокирует 2-й ресурс для других роботов.
  3. Робот 1 заканчивает работу с 1-м ресурсом и устанавливает ему статус "Обработан".
  4. Робот 1 ищет следующий ресурс. 2-й ресурс уже заблокирован Роботом 2, поэтому Робот 1 не сможет его получить и начнет читать 3-й ресурс, блокируя его для других роботов.
  5. Робот 2 заканчивает работу со 2-м ресурсом и устанавливает ему статус "Обработан".
  6. Робот 2 ищет следующий ресурс:
    • 1-й ресурс уже в статусе "Обработан", поэтому Робот 2 его не найдет
    • 3-й ресурс уже заблокирован Роботом 1, поэтому Робот 1 не сможет его получить
    В итоге Робот 2 начнет читать 4-й ресурс, блокируя его для других роботов.
  7.  И т.д.

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

Тот, кто устанавливает блокировку, является ее инициатором. Есть несколько правил относительно инициаторов:

...