Как язык Io автоматически определяет взаимоблокировку? - PullRequest
8 голосов
/ 08 ноября 2010

Я прочитал, что у языка Io есть Futures, который может автоматически определять взаимоблокировку. Я ничего не знаю об этом и видел некоторый синтаксис. Как язык Io обнаруживает тупики с этим?

Ответы [ 2 ]

7 голосов
/ 28 декабря 2010

Каждое будущее знает, на какого актера он ожидает, и каждый актер знает, на какое будущее он ожидает (если таковой имеется), поэтому Ио просто просматривает эту цепочку, чтобы увидеть, находится ли текущий актер внутри нее. Если это так, был бы тупик. Если нет, то нет.

7 голосов
/ 08 ноября 2010

Ио выдает исключение, когда сталкивается с тупиком.

ссылка: сообщение от, по-моему, Стив Декорте на 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 использует фьючерсы для автоматического обнаружения взаимоблокировок.Когда возникает тупик, он создает исключение, а не разрешает его.

Примечание.Вышеуказанный пост датируется 2003 годом, поэтому произошли некоторые изменения.Пожалуйста, смотрите последнюю онлайн Concurrency документацию для получения последней информации.


Обновление - И из онлайн документации там написано:

Автоматическое обнаружение взаимоблокировок

Преимущество использования фьючерсов заключается в том, что, когда будущее требует ожидания, оно будет проверять, не приостановлено ли ожидание результатаможет привести к тупику и, если это так, избежать тупика и вызвать исключение.Он выполняет эту проверку, просматривая список подключенных фьючерсов.

...