2013-10-05 71 views
1

我想在两个车道之间共享一个全局变量,想法是当lane1更新一个共享变量时,我应该能够在车道2得到预定时获得它的更新值。有针对这个的解决方法吗?在Lua车道之间共享一个全局变量

代码片段如下: -

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

下面是示例实现wh ERE我们可以分享车道之间的varible(使用设置& 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() 
1

你将不得不使用林多斯的变量自己同步 - 这里的文档:

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() 
+0

感谢Gran..The的解决方案是不是我一直在寻找,这将创建额外的开销和复杂性进入实施。根据Lua文档,有一个luaG_deep_userdata()的概念来解决这种问题,但我错过了如何从文档中实现它。 – Anoop

+0

@Anoop Deep userdata是一个** Lanes **概念,而不是一个Lua概念。它不会比使用Linda简单,尽管你想使用'get'和'set'而不是'send' /'receive'(在Lanes doc中搜索':get') – dualed

+0

@dualed我实际上正在使用在回答这个问题时首先得到'set',但是它导致Lua崩溃... –

相关问题