Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder2.hal-mli.net!weretis.net!feeder1.news.weretis.net!news.swapon.de!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail From: Knute Johnson Newsgroups: comp.lang.java.programmer Subject: Re: Volatile happens before question Date: Tue, 17 Jan 2012 08:49:14 -0800 Organization: A noiseless patient Spider Lines: 40 Message-ID: References: <09848313-2372-4c23-8f52-fa84c612c100@u32g2000yqe.googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Tue, 17 Jan 2012 16:49:15 +0000 (UTC) Injection-Info: mx04.eternal-september.org; posting-host="mz/LDSJwiWnk3Jnnqg7x+Q"; logging-data="1515"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+FelIRT5HIcVF2Yr6ykAeF" User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1 In-Reply-To: Cancel-Lock: sha1:IXN5tquu/QuV3Fe4VE+yN2kGhKY= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:11405 On 1/17/2012 8:33 AM, markspace wrote: > On 1/17/2012 8:18 AM, Knute Johnson wrote: > >>> Does this work in reverse too? >>> >>> For example, >>> >>> Thread 1 >>> int b = 0; >>> volatile boolean a = false; >>> ... >>> ... >>> a = true; >>> b = 1; >>> >>> Thread 2 >>> int bStore = b; >>> if (!a) { >>> System.out.println("The value of b is " + bStore); >>> } >>> >>> Will this always print either "The value of b is 0" or nothing. >> >> Yes > > > I'm pretty sure Peter got the correct answer which is "no." I want to > stick my answers in a separate reply, so I'll just add that this is an > easy mistake to make and if both Peter and you hadn't already provided > some insights I probably would have flubbed it up myself. > > Reasoning about synchronization can be pretty hard. Make sure you > consider carefully all possibilities when analyzing multi-threaded > programs for bugs. OK, I'll bite, if a is false how can b be anything but 0? -- Knute Johnson