Files
Nim/tests/threads/threadex.nim
ringabout cdbf5b4699 fixes a severe bug of testament (#20832)
* test azure

* use exit 1

* try again

* use useSysAssert

* disable i386

* use refc for tlsEmulation on i386

* use refc

* disable i386

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
2022-11-17 09:38:07 +08:00

51 lines
896 B
Nim

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