2013-10-05 69 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崩潰... –

相關問題