Concurrency Io语言如何自动检测死锁?
我读到Io语言具有自动检测死锁的功能。我对它一无所知,也见过一些语法。Io语言如何通过这种方式检测死锁?Io遇到死锁时会抛出异常 从我相信开始。贴在下面的消息: Io具有异步消息和未来形式的连续性。例如: 这种使用方式的有趣之处在于,似乎没有人觉得它难以理解。此外,Io使用futures进行自动死锁检测。当死锁发生时,它会引发异常而不是允许它 注意。上述发布日期为2003年,因此发生了一些变化。有关最新信息,请参阅最新的在线文档Concurrency Io语言如何自动检测死锁?,concurrency,deadlock,iolanguage,Concurrency,Deadlock,Iolanguage,我读到Io语言具有自动检测死锁的功能。我对它一无所知,也见过一些语法。Io语言如何通过这种方式检测死锁?Io遇到死锁时会抛出异常 从我相信开始。贴在下面的消息: Io具有异步消息和未来形式的连续性。例如: 这种使用方式的有趣之处在于,似乎没有人觉得它难以理解。此外,Io使用futures进行自动死锁检测。当死锁发生时,它会引发异常而不是允许它 注意。上述发布日期为2003年,因此发生了一些变化。有关最新信息,请参阅最新的在线文档 更新-从中可以看出: 自动死锁检测 使用futures的一个优点
更新-从中可以看出: 自动死锁检测 使用futures的一个优点是,当futures需要等待时,它将检查暂停等待结果是否会导致死锁,如果是,则避免死锁并引发异常。它通过遍历已连接期货的列表来执行此检查
每个未来都知道它在等待哪个参与者,每个参与者都知道它在等待哪个未来(如果有的话),所以Io只是沿着这条链走,看看当前参与者是否在其中。如果是,就会出现僵局。如果没有,则没有。这与停车问题有何关系?死锁检测不是基本上可以看到何时停止吗?或者这是一个总是可以识别的子集?
aFuture = obj @foo
// the @ means "perform message foo asynchronously"
// that is, in a light weight thread owned by obj
// The aFuture's value ivar is set with the result
result = aFuture value
// This causes the current light weight thread to pause
// until the aFuture's vale is set.
// So this is effectively a continuation.
// another option is:
obj @(foo) sendResultTo(target, "foobar")
// which is more like the callcc style