アクターを使用して食事の哲学者の問題を解決する方法を理解しようとしています。ご存じないかもしれませんが、問題の核心は、スレッドが続行する前に 2 つのロックを取得する必要があることです...そして、これらの 2 つのロックを争う複数のスレッドが存在します。
アクターを使用してこれをモデル化する方法の 1 つを次に示します。
# asynchronously request locks from 2 forks (both forks are actors)
lock1 = fork1.future.lock
lock2 = fork2.future.lock
if lock1 && lock2 # wait to get both locks
... critical section
end
しかし、2 つのスレッドがそれぞれ 1 つのロックを持っていて、他のスレッドがそのロックを放棄するのを待っている場合、これはデッドロックになると思います。
一般に、アクターを使用してアトミックに 2 つのリソースにアクセスする方法をモデル化するにはどうすればよいでしょうか?