This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: how to cast away 'volatile'?


"Kevin P. Fleming" <kpfleming@starnetworks.us> writes:

> Ian Lance Taylor wrote:
> > That means that the only correct way to share a memory buffer between
> > threads is to use a mutex, and it means that the mutex code can not be
> > written in standard conformant C.  The mutex code must use asm
> > statements to insert memory barriers as required (on the x86 a lock
> > prefix serves as a memory barrier (except that some specific x86
> > processors have bugs, but I digress...)).
> 
> This comment makes me curious, since I see (and work on) plenty of code
> that shares data structures between threads using only a mutex for
> protection and no memory barrier instructions of any kind. This code is
> using standard POSIX threading constructs and seems to work fine on
> multi-CPU and multi-core systems, both x86 and other flavors.

The mutex code itself, assuming it is written correctly, provides the
required memory barriers.

> Are you referring to a specific sort of memory sharing between threads
> here, or are you saying that you think that _all_ objects shared between
> threads need to be protected in this way?

All objects shared between threads need to protected by a mutex, or by
some other type of memory barrier.

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]