在Lua lanes之间共享全局变量

我想在两个 thread 之间共享一个全局变量,我的想法是当 lane1 更新了一个共享变量时,当 lane2 被调度时,我应该能够获取它更新后的值。有解决方法吗?

下面是代码片段:

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

local function lane2()
    ..
    print(shared_variable)--> 共享变量没有被更新,总是打印 0
end

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

T1 = Thread1()
T2 = Thread2()

T1:join()
T2:join()
点赞
用户2675813
用户2675813

你需要使用 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-05 09:59:33
用户2824473
用户2824473

以下是示例实现,我们可以在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()
2013-10-08 04:10:20