Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail From: Uncle Steve Newsgroups: comp.lang.c,comp.programming.threads Subject: Re: Clarification on the applicability of compile-time optimization to a struct variable which encompasses a mixture of fields declared as volatile and non-volatile individually Date: Fri, 06 Jul 2012 14:33:34 -0400 Organization: A noiseless patient Spider Lines: 58 Message-ID: References: <94eafd27-6aba-4a17-9403-d42912312e6c@googlegroups.com> <0.8f83cddfeac55b9f2de1.20120705232249BST.87k3yhalvq.fsf@bsb.me.uk> <7ee0b658ce2dc96-3111f@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit Injection-Info: mx04.eternal-september.org; posting-host="M1JqkNNJU2aX/HiSUuiK1A"; logging-data="3026"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+jlehye5Wuno1+SGB7ITOM" User-Agent: nn 6.7.3 Content-Length: 2499 Cancel-Lock: sha1:11/QZhX05W/lZthIBXOkEsbOmC8= Xref: csiph.com comp.lang.c:23114 comp.programming.threads:939 On Fri, Jul 06, 2012 at 06:11:28PM -0400, Eric Sosman wrote: > On 7/6/2012 2:01 PM, Uncle Steve wrote: > >On Sat, Jul 07, 2012 at 09:20:57AM +1200, Ian Collins wrote: > >>On 07/ 7/12 05:08 AM, Uncle Steve wrote: > >>>[...] > >>>This is a concern in my mind right now as I'm writing some posix > >>>threads code, and so obviously there are a large number of variables > >>>which ought to be declared volatile. > >> > >>What leads you to that conclusion? That line of though usually implies > >>you are misunderstanding the relationship between volatile and threads. > >> > >>What are you trying to achieve with volatile? > > > >Well, I have some data structures that will be accessed from arbitrary > >threads, so I want to make sure there's no funny business happening > >behind the scenes where the compiler decides that certain accesses are > >optional. > > Although the latest "C11" Standard adds some multi-threading > support, I'll ignore that because (1) C11 implementations are not > exactly thick upon the ground as yet, (2) you mentioned you're > using Pthreads anyhow, and (3) I haven't studied the C11 threading > stuff closely enough to be a competent commentator. ;-) > > So: As long as you're using an established non-C-specific > threading framework, I suggest you visit comp.programming.threads, > a newsgroup devoted to multi-threading issues. There you will learn > that `volatile' is neither necessary *nor* sufficient in connection > with variables shared between threads. (You needn't take my word on > this: Just browse the comp.programming.threads archives and you'll > see the local experts refuting this misunderstanding every couple > weeks. It's comp.programming.threads' equivalent of `void main'.) > > Or, as my first threading teacher put it, "Don't Do That." Is there are C standard threading framework? Threaded code is a de-facto reality in today's multi-core environment. Save for the embedded sector, most systems will run threads in parallel, and that is that. C has to recognize this watershed moment in the refinement of the language. While the specifics of an implementation within a given operating system are not C issues, certain common optimizations can be a problem with certain algorithms, and so there ought to be a C solution to the problem. What is it about the volatile attribute that makes it insufficient in your mind to the problem presented by threaded code? Regards, Uncle Steve -- The moon has never been closer.