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

8 concurrency deadlock iolanguage

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

dra*_*tun 7

Io遇到死锁时抛出异常.

参考:一从我相信史蒂夫·德科尔特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
Run Code Online (Sandbox Code Playgroud)

关于这种使用方式的有趣之处在于,似乎没有人觉得难以理解.此外,Io使用期货进行自动死锁检测.当发生死锁时,它会引发异常而不是允许它.

NB.以上帖子的日期是2003年,所以有一些变化.Concurrency有关最新信息,请参阅最新的在线文档.


更新 - 从在线文档中它确实说:

自动死锁检测

使用期货的一个优点是,当未来需要等待时,它将检查暂停等待结果是否会导致死锁,如果是,则避免死锁并引发异常.它通过遍历连接的期货列表来执行此检查.


小智 7

每个未来都知道它正在等待哪个演员,并且每个演员都知道它正在等待的未来(如果有的话)所以Io只是走这条链来看看当前演员是否在其中.如果是,就会出现僵局.如果没有,则没有.