Path: csiph.com!usenet.pasdenom.info!gegeweb.org!de-l.enfer-du-nord.net!feeder1.enfer-du-nord.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Ian Collins 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: Sat, 07 Jul 2012 11:29:02 +1200 Lines: 67 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=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net nOwZALTNCCuzPl2+GlnvnwKpJbJHpB8ZN1RVpkXwDI1Vc4jfyHDl81VDH21EMN9FYW Cancel-Lock: sha1:Uw9ccO8W4IxIYnb1QwQGWT7aIgg= User-Agent: Mozilla/5.0 (X11; SunOS i86pc; rv:12.0) Gecko/20120423 Thunderbird/12.0 In-Reply-To: Xref: csiph.com comp.lang.c:23118 comp.programming.threads:940 On 07/ 7/12 06:33 AM, Uncle Steve wrote: > 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? Yes, read C11. If you are familiar with pthreads, you'll see where most of the new primitives originate. > 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. Only if you incorporate threads in your code either explicitly or implicitly with something like OpenMP. > C has to recognize this watershed moment > in the refinement of the language. It has. > 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? Given you are the one going against conventional wisdom, what in your mind makes volatile a solution to the problem presented by threaded code? In addition, what is "the problem presented by threaded code"? -- Ian Collins