读者作家锁在Akka使用演员模型

时间:2016-03-17 15:18:51

标签: multithreading scala thread-safety akka actor

我想使用actor模型实现着名的reader writer模型。我们可以有多个读者阅读,但只有一个作家可以写。此外,当作家写道没有读者可以阅读,反之亦然。

为了解决这个问题,我想到了使用一个监督演员,它为读者演员和作家演员的队列维护一套。现在,当读者的集合为空时,作家可以出列并开始写作。此外,当作者完成所有读者演员的集合时,可以开始阅读。

我们可以用演员模型解决这个着名的问题吗?

此模型是否比使用读或写锁定的原始读写器问题更好?

2 个答案:

答案 0 :(得分:1)

您可能希望使用ScalaSTM库来查看“软件事务内存”。

您将使用原子访问创建共享Ref。当多个线程进入原子块时,两者都继续。写入Ref的第一个线程获胜,失败者从头开始重新启动原子块(从而重新读取)。因此,两个线程将始终使用最新数据。

https://nbronson.github.io/scala-stm/

STM是Locks和Mutexes的替代品,但具有更好的并发性,因为它使用乐观的非阻塞写入而不是阻塞写入和读取。编写和维护STM代码比使用锁更容易。

答案 1 :(得分:0)

您可以简单地创建一个主管演员来管理传入的请求。 然后,主管Actor可以向读者Actors发送消息。当读者发送确认后,写入请求可以转发给作者Actors。