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'?


Michael Eager <eager@eagercon.com> writes:

> > There's nothing to stop the machine from
> > reordering memory writes, even if the compiler doesn't.
> 
> Yes, it's safe.  It doesn't matter which microsecond that the flag is set.
> (Or if it does, then your code should be using a mutex or some other
> form of synchronization.)
> 
> Say you have one thread which performs some process when it sees
> a shared flag set.  It checks this flag every second.  If another
> process sets this flag, the service thread will notice and take action.
> 
> If the signaling process and the receiving process both try to
> access the shared memory at the same time, the processor may
> reorder the operations as it chooses.  The worst case is that
> the server will check and see that the flag is not set, then
> the signaling process will set the flag.  The result is a short
> delay in the receiving process noticing that the flag is set.
> 
> Note that there is a race condition which is problematic.  If the
> receiving process clears the flag, at the same time that the
> signaling process sets it, then these may be reordered.  So you
> need to insure that only one of the processes ever writes to the
> flag.

I think that will be OK in practice provided the only memory shared
between the two processes is the signalling flag itself.

Ian


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