Scala 中的共享链表
Shared Linked List in Scala
我有一些工人演员和一个由主演员发送给工人的任务列表(链表)。链表的每个元素都有一个布尔标志,用于指定该元素是否已被工人拿走。如果没有,工作人员将标志设置为已选择并开始处理该元素。当演员完成时,该元素将检查下一个未选择元素的列表元素。
工作人员将继续工作,直到列表中没有要处理的元素为止。
我的问题是设置标志以显示元素已被选中的最佳方式。我正在考虑使用 AtomicBoolean 作为标志来自动检查和设置它。但我不知道如何在 Scala 中使用 AtomicBoolean。
请指教
您可以导入 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
不过,我会重新考虑设计 - actor 通常不需要通过 queues/inboxes 以外的任何机制进行同步。怎么样:
- master actor 在 worker actors 之间分配工作单元
- worker actor 处理单元并将就绪位发送到 accumulator actor
- accumulator actor 收集准备好的结果并输出一个列表。
我有一些工人演员和一个由主演员发送给工人的任务列表(链表)。链表的每个元素都有一个布尔标志,用于指定该元素是否已被工人拿走。如果没有,工作人员将标志设置为已选择并开始处理该元素。当演员完成时,该元素将检查下一个未选择元素的列表元素。 工作人员将继续工作,直到列表中没有要处理的元素为止。 我的问题是设置标志以显示元素已被选中的最佳方式。我正在考虑使用 AtomicBoolean 作为标志来自动检查和设置它。但我不知道如何在 Scala 中使用 AtomicBoolean。 请指教
您可以导入 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
不过,我会重新考虑设计 - actor 通常不需要通过 queues/inboxes 以外的任何机制进行同步。怎么样:
- master actor 在 worker actors 之间分配工作单元
- worker actor 处理单元并将就绪位发送到 accumulator actor
- accumulator actor 收集准备好的结果并输出一个列表。