Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.csd.uwm.edu!bionet!apple!oliveb!mintaka!think!barmar From: barmar@think.COM (Barry Margolin) Newsgroups: comp.std.c Subject: Re: observability Message-ID: <28946@news.Think.COM> Date: 7 Sep 89 03:03:32 GMT References: <1237@gmdzi.UUCP> <10885@smoke.BRL.MIL> <242@ssp1.idca.tds.philips.nl> <10937@smoke.BRL.MIL> <1989Sep6.160709.4890@light.uucp> <1989Sep6.183349.2866@jarvis.csri.toronto.edu> Sender: news@Think.COM Organization: Thinking Machines Corporation, Cambridge MA, USA Lines: 36 In article <1989Sep6.183349.2866@jarvis.csri.toronto.edu> flaps@dgp.toronto.edu (Alan J Rosenthal) writes: >Many people claim that "volatile" is meaningless since it is not observable. Here's a simple example where I think "volatile" is meaningful: int global_variable; handler() { global_variable = 2 } main() { signal(SIGSOMETHING, handler); global_variable = 1;; printf("%d", global_variable); } I believe that it would be valid for an implementation to print either 1 or 2, because the lack of a "volatile" modifier permits global_variable's value to be cached between the assignment and the printf. Adding a "volatile" modifier disallows this optimization, so the program must print 2. >bvs@light.uucp (Bakul Shah) writes: >>Is a program with *no* output of any kind observable? This reminds me of the old stories about an optimizing Fortran compiler that was doing amazingly well on benchmarks because it optimized away the entire program because it had no I/O statements. Barry Margolin Thinking Machines Corp. barmar@think.com {uunet,harvard}!think!barmar