1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
local fiber = require('fiber')
-- -------------------------------------------------------------------------- --
-- Local functions
-- -------------------------------------------------------------------------- --
-- printer task fiber
local printer_task
-- tester task fiber
local tester_task
-- test log
local result = {}
-- -------------------------------------------------------------------------- --
-- printer task routines
-- -------------------------------------------------------------------------- --
-- odd printer
local function odd(x)
table.insert(result,'A: odd '..tostring(x))
fiber.sleep(0.0)
table.insert(result,'B: odd '..tostring(x))
end
-- even printer
local function even(x)
table.insert(result,'C: event '..tostring(x))
if x == 2 then
return
end
table.insert(result,'D: event '..tostring(x))
end
-- printer task routine main function
local function printer_task_routine(x)
for i = 1, x do
if i == 3 then
fiber.sleep(0)
end
if i % 2 == 0 then
even(i)
else
odd(i)
end
end
end
------------------------------------------------------------------------
-- tester task routines
------------------------------------------------------------------------
-- tester task routine main function
local function tester_task_routine()
printer_task = fiber.create(printer_task_routine, 5)
table.insert(result, "tester: status(printer) = " .. printer_task:status())
local count = 1
while printer_task:status() ~= "dead" do
table.insert(result, "count: " .. tostring(count))
table.insert(result, "status: " .. printer_task:status())
count = count + 1
fiber.sleep(0)
end
end
-- -------------------------------------------------------------------------- --
-- Test functions
-- -------------------------------------------------------------------------- --
-- run fiber test
function box_fiber_run_test()
-- run tester
tester_task = fiber.create(tester_task_routine)
while tester_task:status() ~= 'dead' do
fiber.sleep(0)
end
return result
end
|