Synchronous concurrency: Difference between revisions

Content added Content deleted
m (fixed a refcount issue)
No edit summary
Line 1,474: Line 1,474:
mvar.put(MVar, Count, !IO)
mvar.put(MVar, Count, !IO)
).</lang>
).</lang>

=={{header|Nim}}==
Compile with <code>nim --threads:on c sync.nim</code>:

{{trans|Python}}
Two threads are spun up that communicate over a channel.

<lang nim>var msgs: Channel[string]
var count: Channel[int]

const FILE = "input.txt"

proc read() {.thread.} =
var file = open(FILE)
for line in file.lines:
msgs.send(line)
msgs.send(nil)
file.close()
echo count.recv()
count.close()

proc print() {.thread.} =
var n = 0
while true:
var msg = msgs.recv()
if msg == nil:
break
echo msg
n += 1
msgs.close()
count.send(n)

var reader_thread = Thread[void]()
var printer_thread = Thread[void]()

msgs.open()
count.open()
createThread(reader_thread, read)
createThread(printer_thread, print)
joinThreads(reader_thread, printer_thread)</lang>


=={{header|OCaml}}==
=={{header|OCaml}}==