diff options
author | Yuriy Glukhov <yutiy.glukhov@gmail.com> | 2016-03-05 14:20:09 +0200 |
---|---|---|
committer | Yuriy Glukhov <yutiy.glukhov@gmail.com> | 2016-03-05 14:20:09 +0200 |
commit | 9cdb4ee1cbd7928eb87699f246c7fe322273d058 (patch) | |
tree | 0da05eecfd9c79efadbf58a21ab74fd18ab92ad2 /lib/pure | |
parent | 1d443cec8d5b5e7bd7d73b005527e6224cd2346a (diff) | |
download | Nim-9cdb4ee1cbd7928eb87699f246c7fe322273d058.tar.gz |
Fixed semaphore on iOS.
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/concurrency/threadpool.nim | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/lib/pure/concurrency/threadpool.nim b/lib/pure/concurrency/threadpool.nim index a30d49889..9490dbbd5 100644 --- a/lib/pure/concurrency/threadpool.nim +++ b/lib/pure/concurrency/threadpool.nim @@ -22,9 +22,9 @@ type L: Lock counter: int -proc createSemaphore(): Semaphore = - initCond(result.c) - initLock(result.L) +proc initSemaphore(cv: var Semaphore) = + initCond(cv.c) + initLock(cv.L) proc destroySemaphore(cv: var Semaphore) {.inline.} = deinitCond(cv.c) @@ -77,7 +77,7 @@ proc openBarrier(b: ptr Barrier) {.compilerProc, inline.} = proc closeBarrier(b: ptr Barrier) {.compilerProc.} = fence() if b.left != b.entered: - b.cv = createSemaphore() + b.cv.initSemaphore() fence() b.interest = true fence() @@ -195,7 +195,7 @@ proc nimCreateFlowVar[T](): FlowVar[T] {.compilerProc.} = new(result, fvFinalizer) proc nimFlowVarCreateSemaphore(fv: FlowVarBase) {.compilerProc.} = - fv.cv = createSemaphore() + fv.cv.initSemaphore() fv.usesSemaphore = true proc nimFlowVarSignal(fv: FlowVarBase) {.compilerProc.} = @@ -251,7 +251,7 @@ proc awaitAny*(flowVars: openArray[FlowVarBase]): int = ## **Note**: This results in non-deterministic behaviour and so should be ## avoided. var ai: AwaitInfo - ai.cv = createSemaphore() + ai.cv.initSemaphore() var conflicts = 0 for i in 0 .. flowVars.high: if cas(addr flowVars[i].ai, nil, addr ai): @@ -294,9 +294,11 @@ var currentPoolSize: int maxPoolSize = MaxThreadPoolSize minPoolSize = 4 - gSomeReady = createSemaphore() + gSomeReady : Semaphore readyWorker: ptr Worker +gSomeReady.initSemaphore() + proc slave(w: ptr Worker) {.thread.} = while true: when declared(atomicStoreN): @@ -354,10 +356,10 @@ when defined(nimRecursiveSpawn): var localThreadId {.threadvar.}: int proc activateWorkerThread(i: int) {.noinline.} = - workersData[i].taskArrived = createSemaphore() - workersData[i].taskStarted = createSemaphore() + workersData[i].taskArrived.initSemaphore() + workersData[i].taskStarted.initSemaphore() workersData[i].initialized = true - workersData[i].q.empty = createSemaphore() + workersData[i].q.empty.initSemaphore() initLock(workersData[i].q.lock) createThread(workers[i], slave, addr(workersData[i])) when defined(nimRecursiveSpawn): @@ -366,12 +368,12 @@ proc activateWorkerThread(i: int) {.noinline.} = if gCpus > 0: pinToCpu(workers[i], i mod gCpus) proc activateDistinguishedThread(i: int) {.noinline.} = - distinguishedData[i].taskArrived = createSemaphore() - distinguishedData[i].taskStarted = createSemaphore() + distinguishedData[i].taskArrived.initSemaphore() + distinguishedData[i].taskStarted.initSemaphore() distinguishedData[i].initialized = true - distinguishedData[i].q.empty = createSemaphore() + distinguishedData[i].q.empty.initSemaphore() initLock(distinguishedData[i].q.lock) - distinguishedData[i].readyForTask = createSemaphore() + distinguishedData[i].readyForTask.initSemaphore() createThread(distinguished[i], distinguishedSlave, addr(distinguishedData[i])) proc setup() = |