I want to implement the famous reader writer model using actor model. We can have multiple reader reading but only one writer can write. Also when a writer writes no reader can read and vice versa.
To solve this problem i thought of using a superviser actor which maintains a set for reader actors and a queue for writer actors. Now a writer can be dequeued and start writing when the set for readers are empty. Also when the writer completes all reader actors from the set can start reading.
Can we have a better problem of solving this famous problem using actor model?
Also is this model better than the original reader writer problem soved using read or write locks?
Are you sure you are approaching the problem from the best angle? Akka gives you a guarantee that the execution of actor code is single threaded, so each time a message is processed, the code has an "exclusive lock" on the actor's internal state (quotation marks because there is actually no lock involved, just smart thread scheduling).Does your writer need to exchange several messages with the target actor, and the messages from readers should not be processed over the duration of that conversation? In such case, you should be able to implement it with little effort using become [1] and Stash [2]. For extra style points, you can use FSM [3] :) Just watch out for unbounded mailboxes when using Stash! Stashing large number of messages may exhaust heap space.