minor improvement to the barrier implementation

This commit is contained in:
Araq 2014-12-09 01:03:56 +01:00
commit 795a7762cc
3 changed files with 8 additions and 3 deletions

View file

@ -1,6 +1,6 @@
# #
# #
# The Nimrod Compiler # The Nim Compiler
# (c) Copyright 2012 Andreas Rumpf # (c) Copyright 2012 Andreas Rumpf
# #
# See the file "copying.txt", included in this # See the file "copying.txt", included in this

View file

@ -65,7 +65,9 @@ proc barrierEnter(b: ptr Barrier) {.compilerProc, inline.} =
proc barrierLeave(b: ptr Barrier) {.compilerProc, inline.} = proc barrierLeave(b: ptr Barrier) {.compilerProc, inline.} =
atomicInc b.left atomicInc b.left
when not defined(x86): fence() when not defined(x86): fence()
if b.interest and b.left == b.entered: signal(b.cv) # We may not have seen the final value of b.entered yet,
# so we need to check for >= instead of ==.
if b.interest and b.left >= b.entered: signal(b.cv)
proc openBarrier(b: ptr Barrier) {.compilerProc, inline.} = proc openBarrier(b: ptr Barrier) {.compilerProc, inline.} =
b.entered = 0 b.entered = 0

View file

@ -3,7 +3,10 @@ version 0.10
Repetition renders the ridiculous reasonable. Repetition renders the ridiculous reasonable.
- introduce ``--experimental`` switch - document 'converter'
- document the tables module better
- c2nim depends on the compiler - c2nim depends on the compiler
- make nimble part of the distribution - make nimble part of the distribution
- split idetools into separate tool - split idetools into separate tool