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
|
discard """
disabled: i386
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 = TMsg(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
|