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?
Respuesta
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.
Impresionante, simplemente increíble. –
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.
- 1. ¿Hay alguna aplicación escrita en el lenguaje de programación Io? (O, distribuyendo aplicaciones Io.)
- 2. cómo resolver el problema de interbloqueo?
- 3. ¿Cómo puedo definir mis propios operadores en el lenguaje de programación Io?
- 4. ¿Detecta el software AdBlocking?
- 5. ¿Cómo configurar el empuje automático?
- 6. Interbloqueo en el subproceso de Python popen
- 7. Cómo vaciar el buffer io en Erlang?
- 8. ¿Cuál es la diferencia entre newSlot y setSlot en el lenguaje Io?
- 9. ¿Cómo se detecta el fraude por clic?
- 10. Detecta lenguaje y redirige a un subdominio en Symfony
- 11. Haskell IO: No se pudo encontrar el tipo esperado `IO a0 'con el tipo real
- 12. No existe el "lenguaje compilado" o el "lenguaje interpretado"
- 13. Interbloqueo SQLServer
- 14. Detecta el compilador con #ifdef
- 15. Android - ¿Detecta el teclado visible?
- 16. ¿Cómo ajustar el mapeador automático de FluentNHibernate?
- 17. ¿Cómo implementar el desplazamiento automático en DataGridView?
- 18. netbeans: cómo desactivar el texto automático diff?
- 19. ¿Qué es el diseño automático?
- 20. Ejemplo de interbloqueo de subprocesos en C#
- 21. Obtenga el siguiente incremento automático
- 22. ¿Extender el lenguaje C#?
- 23. El lenguaje while
- 24. El estado de Linux async IO?
- 25. Biblioteca de procesamiento de lenguaje natural para etiquetado automático (.NET)
- 26. Cómo ejecutar el lenguaje esotérico ZOMBIE
- 27. Deshabilitar el desplazamiento automático RichTextBox
- 28. QGraphicsView: Deshabilitar el desplazamiento automático
- 29. Adquirir un bloqueo en dos mutexes y evitar el interbloqueo
- 30. Lea el hexágono en C# usando IO
¿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