同步读/写端口时避免递归?

Shi*_*eng 108 io asynchronous rebol rebol3

Rebol 3中的所有端口操作都是异步的.我可以找到进行同步通信的唯一方法是调用wait.

但是在这种情况下调用wait的问题是它将检查所有开放端口的事件(即使它们不在传递给等待的端口块中).然后他们调用响应事件处理程序,但可以在其中一个事件处理程序中完成读/写操作.这可能导致递归调用"等待".

我该如何解决这个问题?

Riv*_*all -1

你可以只使用一把锁。Cummunication1 可以设置一些全局锁定状态,即使用变量(确保它是线程安全的)。locked = true。然后Communication2就可以等待,直到它被解锁。

loop do
    sleep 10ms
    break if not locked
end
locked = true
handle_communication()
Run Code Online (Sandbox Code Playgroud)