minor improvement to the barrier implementation
This commit is contained in:
parent
5979d35ab2
commit
795a7762cc
3 changed files with 8 additions and 3 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
5
todo.txt
5
todo.txt
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue