Re: Information on atomics in the gnu extensions: is a dereference atomic?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[Redirect to gcc-help]

Hi,

On 04/29/2014 02:11 PM, Leo Ferres wrote:

> Suppose the following C code.
> 
> int t = __sync_fetch_and_add(&s->r, 1);
> 
> s is a struct with member r, which is an volatile int.
> 
> Is this an atomic operation, even if you include the indirection? In
> other words, can a thread come between the dereferencing operation and
> the atomic increment of another thread?

Yes.  Or rather, which dereference?  There are two.

> If so, is there a solution besides whileing with a compare and swap?
>
> What about stdatomic.h in C11, is there a way to do what I want there?

You need an atomic operation which covers a CAS and a fetch.  Unless you
want to use transactional memory you're going to have to use a lock.

Andrew.





[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux