Boost logo

Boost Users :

Subject: Re: [Boost-users] [interprocess] atomic_write32
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2011-12-08 18:47:44


El 08/12/2011 17:04, peter jacobsen escribió:
> I have noticed that for Windows, atomic_write32 is defined thus:
>
> inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val)
> { winapi::interlocked_exchange(reinterpret_cast<volatile long*>(mem), val); }
>
> Whereas otherwise like this:
>
> inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val)
> { *mem = val; }
>
> the reads are both:
> return *mem;
>
> Windows documentation states that:
> 'Simple reads and writes to properly-aligned 32-bit variables are
> atomic operations.'
> [http://msdn.microsoft.com/en-us/library/windows/desktop/ms684122%28v=vs.85%29.aspx]
>
> Is there a reason for this?

Those operations require also memory barriers. I'm not an expert on
atomic operations so the code might have several errors. My mid-term
plan is to port it to Boost.Atomic.

Ion


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net