ライブラリを使用してボタン付きのハードウェアデバイスにアクセスする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のマルチスレッドに関するほとんどの情報源は、協調スケジューリングで継続を使用することを推奨していますが、私の場合、それをどのように適用できるかわかりません。