Общий связанный список в Scala
У меня есть ряд рабочих актеров и список задач (связанный список), который мастер посылает рабочим. Каждый элемент связанного списка имеет логический флаг, который указывает, занят ли элемент рабочим или нет. Если нет, работник устанавливает флажок выбранный и начинает работать над этим элементом. Когда актер завершит работу, этот элемент проверит элементы списка на наличие следующего не выбранного элемента. Рабочие будут работать до тех пор, пока в списке не останется элементов для работы. Мой вопрос - лучший способ установить флаг, чтобы показать, что элемент выбран. Я думаю об использовании AtomicBoolean для флага, чтобы проверить и установить его атомарно. Но я не знаю, как использовать AtomicBoolean в Scala. пожалуйста, порекомендуйте
1 ответ
Вы можете импортировать Java AtomicBoolean и использовать его как обычно:
scala> import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicBoolean
scala> val ab = new AtomicBoolean(false)
ab: java.util.concurrent.atomic.AtomicBoolean = false
Я бы переосмыслил дизайн - актерам обычно не нужно синхронизироваться по какому-либо механизму, кроме их очередей / входящих. Как насчет:
- Мастер актер распределяет рабочие единицы среди рабочих актеров
- рабочие актеры обрабатывают единицы и отправляют готовые биты актеру-накопителю
- Актер-накопитель собирает готовые результаты и выводит список.