File: fiber.lua

package info (click to toggle)
tarantool 2.6.0-1.4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 85,412 kB
  • sloc: ansic: 513,775; cpp: 69,493; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,178; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (80 lines) | stat: -rw-r--r-- 2,128 bytes parent folder | download | duplicates (5)
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