Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torch/threads-ffi.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonan Collobert <ronan@collobert.com>2014-10-17 22:43:38 +0400
committerRonan Collobert <ronan@collobert.com>2014-10-17 22:43:38 +0400
commit01228f7771af245b73a2ad3e5d4d01eee903c31c (patch)
treed813ad9fcf063ea8a62ffff5556d70f31603ad43 /init.lua
parent847e1893cb417a288452fa518127ef0e990e09bd (diff)
cleaned up workers
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua16
1 files changed, 12 insertions, 4 deletions
diff --git a/init.lua b/init.lua
index ec29ae7..1098036 100644
--- a/init.lua
+++ b/init.lua
@@ -91,8 +91,8 @@ function Threads:__call(N, ...)
-- si ca chie, renvoie un id special (genre 0) avec le msg d'erreur dans res!!
local res, endcallbackid = threadworker:dojob()
mainworker:addjob(function()
- return endcallbackid
- end, unpack(res))
+ return res, endcallbackid
+ end)
end
return 0
@@ -116,12 +116,20 @@ function Threads:__call(N, ...)
return self, initres
end
+function Threads:dojob()
+ local endcallbacks = self.endcallbacks
+ local args, endcallbackid = self.mainworker:dojob()
+ local res = endcallbacks[endcallbackid](unpack(args))
+ endcallbacks[endcallbackid] = nil
+ endcallbacks.n = endcallbacks.n - 1
+end
+
function Threads:addjob(callback, endcallback, ...) -- endcallback is passed with returned values of callback
local endcallbacks = self.endcallbacks
-- first finish running jobs if any
while self.mainworker.isempty ~= 1 do
- self.mainworker:dojob(endcallbacks)
+ self:dojob()
end
-- now add a new endcallback in the list
@@ -144,7 +152,7 @@ end
function Threads:synchronize()
while self.mainworker.runningjobs > 0 or self.threadworker.runningjobs > 0 or self.endcallbacks.n > 0 do
- self.mainworker:dojob(self.endcallbacks)
+ self:dojob()
end
end