sintaxis recursivos recursividad programacion problemas metodos iterativos ejemplos arbol algoritmos asynchronous io rebol rebol3

asynchronous - recursivos - ¿Evita la recursión al leer/escribir un puerto sincrónicamente?



recursividad en programacion (3)

Todas las operaciones de puerto en Rebol 3 son asincrónicas. La única forma en que puedo encontrar para hacer una comunicación sincrónica es llamar a wait .

Pero el problema con la espera de llamada en este caso es que comprobará los eventos para todos los puertos abiertos (incluso si no están en el bloque de puertos pasados ​​para esperar). Luego llaman a los controladores de eventos que responden, pero se puede hacer una lectura / escritura en uno de esos controladores de eventos. Eso podría generar llamadas recursivas para "esperar".

¿Cómo puedo evitar esto?


¿Por qué no creas una especie de función "Buffer" para recibir todos los mensajes de las entradas assyncronous y procesarlos como FIFO (primero en entrar, primero en salir)?

De esta manera, puede mantener las características de sincronización de sus puertos y procesarlos en modo sincronización.


Puedes usar un candado. Cummunication1 puede establecer algún estado de bloqueo global, es decir, con una variable (asegúrese de que sea seguro para subprocesos). locked = true Entonces Communication2 puede esperar hasta que esté desbloqueado.

loop do sleep 10ms break if not locked end locked = true handle_communication()


en los casos en que solo hay eventos asincrónicos y necesitamos respuesta síncrona, iniciamos un temporizador o dormimos por tiempo de espera, si el controlador o el objetivo requerido se cumple, entonces diga verdadero, de lo contrario es falso y asegúrese de que el evento sea cancelado / restablecido para el lo mismo si es crítico.