2010-11-08 7 views
8

He leído que el idioma Io tiene Futures que puede detectar el interbloqueo automático. No sé nada al respecto y he visto alguna sintaxis. ¿Cómo detecta el lenguaje Io los interbloqueos con esto?¿Cómo detecta el lenguaje Io el interbloqueo automático?

+0

¿Qué relación hay con el problema de la detención? ¿No es la detección de interbloqueo que básicamente puede ver cuándo se detendrá? ¿O es este un subconjunto que siempre se puede identificar? – Sebastian

Respuesta

7

Io produce una excepción cuando encuentra un punto muerto.

ref: a post de Creo Steve Dekorte en lang.lightweight. Mensaje pegado a continuación:

Io tiene continuaciones en forma de mensajes asíncronos y futuros. Ejemplo:

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 

Lo interesante de este tipo de uso es que nadie parece tener dificultades para entender. Además, Io usa futuros para realizar la detección automática de interbloqueos. Cuando ocurra un punto muerto, se genera una excepción en lugar de permitirlo.

NB. La publicación anterior data de 2003, por lo que ha habido algunos cambios. Consulte la última documentación en línea Concurrency para obtener la información más reciente.


actualización - Y desde el online documentation sí dice:

Auto Punto muerto Detección

Una ventaja del uso de futuros es que cuando un futuro requiere una espera, comprobará para ver si hacer una pausa para esperar el resultado provocaría un punto muerto y, de ser así, evite el punto muerto y genere una excepción. Realiza esta comprobación al recorrer la lista de futuros conectados.

+0

Impresionante, simplemente increíble. –

7

Cada futuro sabe a qué actor está esperando y cada actor sabe en qué futuro está esperando (si hay alguno) por lo que Io justs camina por esta cadena para ver si el actor actual está dentro de él. Si es así, habría un punto muerto. Si no, no hay.

Cuestiones relacionadas