blob: e61ce5c9c86c88ecfe2fdcd35200fac82eea7d8e (
plain) (
blame)
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
|
discard """
outputsub: "Just a simple text for test"
"""
type
TMsgKind = enum
mLine, mEof
TMsg = object
case k: TMsgKind
of mEof: discard
of mLine: data: string
var
producer, consumer: Thread[void]
chan: Channel[TMsg]
printedLines = 0
prodId: int
consId: int
proc consume() {.thread.} =
consId = getThreadId()
while true:
var x = recv(chan)
if x.k == mEof: break
echo x.data
atomicInc(printedLines)
proc produce() {.thread.} =
prodId = getThreadId()
var m: TMsg
var input = open("tests/dummy.txt")
var line = ""
while input.readLine(line):
m.data = line
chan.send(m)
close(input)
m.k = mEof
chan.send(m)
open(chan)
createThread[void](consumer, consume)
createThread[void](producer, produce)
joinThread(consumer)
joinThread(producer)
close(chan)
doAssert prodId != consId
echo printedLines
|