diff options
Diffstat (limited to 'tests/threads/threadex.nim')
-rw-r--r-- | tests/threads/threadex.nim | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/threads/threadex.nim b/tests/threads/threadex.nim new file mode 100644 index 000000000..90119aee7 --- /dev/null +++ b/tests/threads/threadex.nim @@ -0,0 +1,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 + |