[interfacekit] Re: BLocker's implementation issue(?)

"burton666@xxxxxxxxx" <burton666@xxxxxxxxx> wrote:
> I was looking through BLocker's source code, and I noticed this:
> 
> int32 oldBenaphoreCount = atomic_add(&fBenaphoreCount, 1);
> if (oldBenaphoreCount > 0) {
>  etc. etc.
> 
> Should this be 
> if (atomic_add(&fBenaphoreCount, 1))
>   etc. etc. ?
> 
> Since the value returned from atomic_add could change before 
> executing the if.

No no, atomic_add() returns the old value of fBenaphoreCount and at the 
same time, atomically sets it to another value (adds one).
The "oldBenaphoreCount" variable won't be changed anymore - it reflects 
the state at the time atomic_add() was executed, and we are only 
interested in that state (if it has changed in the meantime, the other 
thread will block, but we don't have to).

Adios...
   Axel.


Other related posts: