12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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()
|