diff options
Diffstat (limited to 'tests/parallel/tdisjoint_slice1.nim')
-rw-r--r-- | tests/parallel/tdisjoint_slice1.nim | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/parallel/tdisjoint_slice1.nim b/tests/parallel/tdisjoint_slice1.nim new file mode 100644 index 000000000..6892e7383 --- /dev/null +++ b/tests/parallel/tdisjoint_slice1.nim @@ -0,0 +1,51 @@ +discard """ + matrix: "--mm:refc" + outputsub: "EVEN 28" +""" + +import threadpool, locks + +block one: + proc odd(a: int) = echo "ODD ", a + proc even(a: int) = echo "EVEN ", a + + proc main() = + var a: array[0..30, int] + for i in low(a)..high(a): a[i] = i + parallel: + var i = 0 + while i <= 29: + spawn even(a[i]) + spawn odd(a[i+1]) + inc i, 2 + # is correct here + + main() + + +block two: + var echoLock: Lock + initLock echoLock + + proc f(a: openArray[int]) = + for x in a: + withLock echoLock: + echo x + + proc f(a: int) = + withLock echoLock: + echo a + + proc main() = + var a: array[0..9, int] = [0,1,2,3,4,5,6,7,8,9] + parallel: + spawn f(a[0..2]) + #spawn f(a[16..30]) + var i = 3 + while i <= 8: + spawn f(a[i]) + spawn f(a[i+1]) + inc i, 2 + # is correct here + + main() |