gpt4 book ai didi

multithreading - 如何预防Lua的种族状况?

转载 作者:行者123 更新时间:2023-12-03 12:52:39 25 4
gpt4 key购买 nike

我正在编写一个Lua脚本,该脚本使用一个库来访问带有按钮的硬件设备。我注册了一个回调函数来处理按钮按下。代码如下:

globalvar = {}

function buttonCallback(buttonId)
...accessing globalvar
end

device.RegisterButtonCallback("buttonCallback")

while true do
end

这行得通。

现在,我不仅要按一次按钮,还要每隔1分钟更新一次globalvar。由于无论如何我都将需要访问网络资源,因此我计划使用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中有关多线程的大多数资料都建议在协作式调度中使用连续性,但我不知道在我的案例中该如何应用。

最佳答案

假设您使用的库在幕后创建了另一个线程,并且您唯一关心的是从回调内部访问globalvar,则可以通过在回调中写入管道并在select循环中读取它来避免使用它。换句话说,使用标准的POSIX样式管道将回调传递回主线程。当处理例如POSIX信号。

关于multithreading - 如何预防Lua的种族状况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14854234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com