Совместное использование глобальной переменной между линиями Lua

Я хотел разделить глобальную переменную между двумя дорожками, идея состоит в том, что когда lane1 обновляет общую переменную, я должен иметь возможность получать ее обновленное значение на дорожке 2, когда она запланирована. Есть ли этому решение?

Фрагмент кода ниже:-

shared_variable = 0
local function lane1()
    ..
    shared_variable = shared_variable + 1
end

local function lane2()
    ..
    print(shared_variable)-->shared variable is not getting updated,always prints 0
end

Thread1= lanes.gen("*",{globals = _G},lane1)
Thread2= lanes.gen("*",{globals = _G},lane2)

T1 = Thread1()
T2 = Thread2()

T1:join()
T2:join()

2 ответа

Решение

Ниже приведен пример реализации, где мы можем разделить переменную между Lanes(используя метод set & get).

require("lanes")

shared_variable = 0

local linda = lanes.linda()

local function lane1()
    while true do
        shared_variable = shared_variable + 1
        linda:set("var", shared_variable)
    end
end

local function lane2()
    while true do
        local v = linda:get("var")
        print(v)
    end
end

Thread1= lanes.gen("*",{globals = _G},lane1)
Thread2= lanes.gen("*",{globals = _G},lane2)

T1 = Thread1()
T2 = Thread2()

T1:join()
T2:join()

Вам придется самостоятельно использовать lindas для синхронизации переменной - вот документация:

http://kotisivu.dnainternet.net/askok/bin/lanes/

И вот исправленная версия вашего кода:

require("lanes")

shared_variable = 0

local linda = lanes.linda()

local function lane1()
    while true do
        shared_variable = shared_variable + 1
        linda:send("var", shared_variable)
    end
end

local function lane2()
    while true do
        local v = linda:receive("var")
        print(v)
    end
end

Thread1= lanes.gen("*",{globals = _G},lane1)
Thread2= lanes.gen("*",{globals = _G},lane2)

T1 = Thread1()
T2 = Thread2()

T1:join()
T2:join()
Другие вопросы по тегам