diff options
Diffstat (limited to 'lib/pure/concurrency')
-rw-r--r-- | lib/pure/concurrency/threadpool.nim | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/pure/concurrency/threadpool.nim b/lib/pure/concurrency/threadpool.nim index f438a85e7..cf4f58588 100644 --- a/lib/pure/concurrency/threadpool.nim +++ b/lib/pure/concurrency/threadpool.nim @@ -530,6 +530,7 @@ proc nimSpawn4(fn: WorkerProc; data: pointer; id: ThreadId) {.compilerProc.} = proc sync*() = ## a simple barrier to wait for all spawn'ed tasks. If you need more elaborate ## waiting, you have to use an explicit barrier. + var toRelease = 0 while true: var allReady = true for i in 0 .. <currentPoolSize: @@ -537,5 +538,9 @@ proc sync*() = allReady = allReady and workersData[i].ready if allReady: break await(gSomeReady) + inc toRelease + + for i in 0 ..< toRelease: + signal(gSomeReady) setup() |