【发布时间】:2012-11-13 18:48:00
【问题描述】:
我正在使用多个 akka Actor 来监控我的系统,每个参与者负责不同的组件。
有些actor操作不应该并行执行。 所以我创建了一个持有锁的演员(LockActor)。 一旦actor想要执行这样的操作,他需要获得LockActor的批准,并且在获得批准之前他不能执行该操作。
如果我想让代码简单,在请求的演员中我需要做类似的事情:
while (LockActor.isLockHold()) {
// perform the operation
}
这当然打破了演员系统的整体设计......
所以我需要使用使代码有点复杂的消息:
- Actor B 需要向 LockActor 发送 LockRequestMessage
- LockActor 正在持有持有锁请求的队列
- 如果可以锁定,LockActor 将 LockApprovalMessage 发送到队列中的第一个 Actor
- 当参与者 B 收到 LockApprovalMessage(不一定立即)时,他需要执行发送 LockRequestMessage 时所需的特定操作(每个参与者可以有多个需要锁定的操作)
所以我的问题是 - 在不破坏演员系统设计但仍保持代码尽可能简单的情况下实现此类事情的最佳方法是什么?
【问题讨论】: