我读到Io语言有Futures
可以自动检测死锁。我对此一无所知,并且看到了一些语法。 Io语言如何检测死锁?
答案 0 :(得分:7)
Io在遇到死锁时抛出异常。
参考:post来自Steve Dekorte lang.lightweight。粘贴在下面的消息:
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
这种使用方式的有趣之处在于,似乎没有人觉得难以理解。此外,Io使用期货进行自动死锁检测。当发生死锁时,它会引发异常而不是允许它。
NB。以上帖子的日期是2003年,所以有一些变化。有关最新信息,请参阅最新的在线Concurrency
文档。
更新 - 从online documentation确实说:
自动死锁检测
使用期货的一个优点是,当未来需要等待时,它会检查暂停等待结果是否会导致死锁,如果是,请避免死锁并引发异常。它通过遍历连接期货列表来执行此检查。
答案 1 :(得分:7)
每个未来都知道它正在等待哪个演员,并且每个演员都知道它正在等待的未来(如果有的话)所以Io只是走这条链来看看当前演员是否在其中。如果是,就会出现僵局。如果没有,则没有。