在同步读取/写入端口时避免recursion?

Rebol 3中的所有端口操作都是asynchronous的。 我可以find做同步通信的唯一方法是呼叫wait

但是在这种情况下调用wait的问题在于,它将检查所有打开的端口的事件(即使它们不在等待的端口块中)。 然后他们调用他们的响应事件处理程序,但是可以在其中一个事件处理程序中进行读/写操作。 这可能会导致recursion调用“等待”。

我如何解决这个问题?

3 Solutions collect form web for “在同步读取/写入端口时避免recursion?”

在只有asynchronous事件并且需要同步回复的情况下,启动计时器或超时hibernate,如果处理程序或所需的目标满足,则返回true,否则返回false,并确保事件被取消/重置为同样如果关键。

为什么不创build一种“缓冲”function来接收来自同步条目的所有消息,并将它们作为FIFO(先进先出)处理?

这样,您可以保持端口的Assync特性,并以同步模式处理它们。

你可以使用一个锁。 Cummunication1可以设置一些全局锁状态,即一个variables(确保它是线程安全的)。 locked = true 。 那么Communication2可以等到它解锁。

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