我试图了解如何使用演员解决哲学家就餐问题。如果您不知道,问题的症结在于,一个线程需要获得两个锁才能继续执行……并且有多个线程在争夺这两个锁。
这是我可以使用演员对此进行建模的一种方法:
# 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
但是我认为如果两个线程各有一个锁并且正在等待另一个线程放弃它的锁,这将导致死锁。
一般来说,我将如何建模使用演员以原子方式访问两个资源?