fixed threadpool and atomics to work with Visual Studio 32 and 64 bit

This commit is contained in:
Spencer Stirling
2015-06-09 11:59:26 -06:00
parent 25a1987517
commit d152ccc1e2
2 changed files with 3 additions and 3 deletions

View File

@@ -290,7 +290,7 @@ proc slave(w: ptr Worker) {.thread.} =
readyWorker = w
signal(gSomeReady)
await(w.taskArrived)
assert(not w.ready)
#assert(not w.ready) # doesn't work with Visual Studio
w.f(w, w.data)
if w.q.len != 0: w.cleanFlowVars
if w.shutdown:

View File

@@ -191,11 +191,11 @@ proc atomicDec*(memLoc: var int, x: int = 1): int =
result = memLoc
when defined(windows) and not someGcc:
proc interlockedCompareExchange(p: pointer; exchange, comparand: int32): int32
proc interlockedCompareExchange(p: pointer; exchange, comparand: int): int
{.importc: "InterlockedCompareExchange", header: "<windows.h>", cdecl.}
proc cas*[T: bool|int|ptr](p: ptr T; oldValue, newValue: T): bool =
interlockedCompareExchange(p, newValue.int32, oldValue.int32) != 0
interlockedCompareExchange(p, cast[int](newValue), cast[int](oldValue)) != 0
# XXX fix for 64 bit build
else:
# this is valid for GCC and Intel C++