我正在使用几个Akka actor来监视我的系统,每个actor负责不同的组件。
其中一些actor操作不应并行执行。因此,我创建了一个持有锁(LockActor)的actor。 一旦actor想要执行这样的操作,他需要向LockActor请求批准,并在获得批准之前不能执行该操作。
如果我想让代码简单化,在请求的actor中,我需要做类似以下的操作:
当然,这破坏了整个演员系统的设计......因此,我需要使用一些使代码变得有点复杂的消息:
其中一些actor操作不应并行执行。因此,我创建了一个持有锁(LockActor)的actor。 一旦actor想要执行这样的操作,他需要向LockActor请求批准,并在获得批准之前不能执行该操作。
如果我想让代码简单化,在请求的actor中,我需要做类似以下的操作:
while (LockActor.isLockHold()) {
// perform the operation
}
当然,这破坏了整个演员系统的设计......因此,我需要使用一些使代码变得有点复杂的消息:
- 演员B需要向锁定演员发送LockRequestMessage
- 锁定演员持有一个队列,其中包含锁请求
- 如果锁是可能的,则锁定演员将LockApprovalMessage发送给队列中的第一个演员
- 当演员B收到LockApprovalMessage(不一定是立即)时,他需要执行发送LockRequestMessage时所需的特定操作(每个演员可以有多个需要锁定的操作)