Io语言如何自动检测死锁?

时间:2010-11-08 04:03:06

标签: concurrency deadlock iolanguage

我读到Io语言有Futures可以自动检测死锁。我对此一无所知,并且看到了一些语法。 Io语言如何检测死锁?

2 个答案:

答案 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只是走这条链来看看当前演员是否在其中。如果是,就会出现僵局。如果没有,则没有。