我正在编写一个 Lua 脚本,它使用一个库来访问带有按钮的硬件设备。我注册了一个回调函数来处理按钮按下。代码如下所示:
globalvar = {}
function buttonCallback(buttonId)
...accessing globalvar
end
device.RegisterButtonCallback("buttonCallback")
while true do
end
这行得通。
现在我想更新 globalvar 不仅在按钮按下,而且在 1 分钟间隔。因为无论如何我都需要访问网络资源,所以我计划使用 socket.select 调用来获得 1 分钟的间隔。
#require "socket"
globalvar = {}
function buttonCallback(buttonId)
...access globalvar
end
device.RegisterButtonCallback("buttonCallback")
while true do
socket.select(nil, nil, 60) -- wait 60 seconds
...access network
...access globalvar
end
现在我关心的是globalvar的并发访问。我怎样才能在这里防止比赛条件?Lua 中关于多线程的大多数资源都建议在协作调度中使用延续,但我不知道如何在我的案例中应用它。