mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-21 16:31:39 +00:00
* Revert "make system random work in VM" * fix #17380 * attempt to fix bug * fix * better * fix * a bit * fix the leaks * revert * fix * better * follow up #17391 * fix * Update tchannels.nim * Update tests/stdlib/tchannels.nim * Update tchannels.nim
This commit is contained in:
33
tests/stdlib/tchannels.nim
Normal file
33
tests/stdlib/tchannels.nim
Normal file
@@ -0,0 +1,33 @@
|
||||
discard """
|
||||
timeout: 5.0 # but typically < 1s
|
||||
disabled: "freebsd"
|
||||
matrix: "--gc:arc --threads:on; --gc:arc --threads:on -d:danger"
|
||||
"""
|
||||
|
||||
when true:
|
||||
# bug #17380: this was either blocking (without -d:danger) or crashing with SIGSEGV (with -d:danger)
|
||||
import std/[channels, isolation]
|
||||
const
|
||||
N1 = 10
|
||||
N2 = 100
|
||||
var
|
||||
sender: array[N1, Thread[void]]
|
||||
receiver: array[5, Thread[void]]
|
||||
|
||||
var chan = newChannel[seq[string]](N1 * N2) # large enough to not block
|
||||
proc sendHandler() =
|
||||
chan.send(isolate(@["Hello, Nim"]))
|
||||
proc recvHandler() =
|
||||
template fn =
|
||||
let x = chan.recv()
|
||||
fn()
|
||||
|
||||
template benchmark() =
|
||||
for t in mitems(sender):
|
||||
t.createThread(sendHandler)
|
||||
joinThreads(sender)
|
||||
for t in mitems(receiver):
|
||||
t.createThread(recvHandler)
|
||||
joinThreads(receiver)
|
||||
for i in 0..<N2:
|
||||
benchmark()
|
||||
Reference in New Issue
Block a user