1

我想在 2 个通道之间共享一个全局变量,这个想法是当通道 1 更新一个共享变量时,我应该能够在它被安排时在通道 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()
4

2 回答 2

2

下面是示例实现,我们可以在通道之间共享一个变量(使用 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()
于 2013-10-08T04:10:20.187 回答
1

您必须自己使用 lindas 来同步变量 - 这是文档:

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

这是您的代码的固定版本:

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()
于 2013-10-05T09:59:33.530 回答