$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Peter Dimov (pdimov_at_[hidden])
Date: 2007-07-25 19:28:57
Baruch Zilber wrote:
> You are right.
> I fixed it and here is the new implementation:
>
> inline void atomic_increment( int * pw )
> {
> _Asm_fetchadd(_FASZ_W, _SEM_ACQ, (void*)pw, +1, _LDHINT_NONE);
> }
>
>
> inline int atomic_decrement( int * pw )
> {
> int r = static_cast<int>(_Asm_fetchadd(_FASZ_W, _SEM_ACQ,
> (void*)pw, -1, _LDHINT_NONE));
> if (1 == r)
> {
> _Asm_mf();
> }
>
> return r - 1;
> }
Hmm. Why did you switch to _SEM_ACQ? atomic_increment should use _REL
because it's rumored to be cheaper, and atomic_decrement needs to use _REL
for correctness.