blob: aa34f5c619ddb23211bfa8e2fa036af951d45d97 (
plain)
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
81
82
83
84
85
86
87
88
89
90
91
|
# threads **
## lock, unlock**
'takes an integer
locks any other thread reaching this lock id until a corresponding unlock is met
```lua
llib.thread.lock(5)
...
llib.thread.unlock(5)
```
more indepth
```lua
local t = llib.thread.async(function(info)
...
llib.thread.lock(5)
...
return N
end)
...
llib.thread.unlock(5)
t:await()
```
## aync **
'takes a function which will be ran in a separate thread with a single parameter with thread info
these have the same backend (and limitations) of network threads
```lua
local thread = llib.thread.async(function(info)
local N = 0
...
return N
end)
```
### thread function parameters **
as used with "info" above
#### info:send() **
'takes "any" value
send a value which can be retrieved from outside the thread with thread:next()
```lua
info:send(5)
info:send("hello")
```
#### info:pause() **
pauses the thread (must be resumed from outside)
### thread return object **
#### thread:await() **
'optional timeout
waits for the thread to return, and returns whatever it returned, if timeout is exceeded nil
```lua
thread:await() -- value of N (above)
```
#### thread:next() **
gets the most oldest value sent using info:send() and pops it
```lua
--(continued from above)
thread:next() -- 5
thread:next() -- "hello"
```
#### thread:kill() **
kills the thread
#### thread:pause() thread:resume() **
stops or continues the thread
|