Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!news.glorb.com!border3.nntp.dca.giganews.com!Xl.tags.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local2.nntp.dca.giganews.com!news.giganews.com.POSTED!not-for-mail NNTP-Posting-Date: Tue, 26 Apr 2011 13:30:04 -0500 From: Pete Becker Organization: Roundhouse Consulting, Ltd. Newsgroups: comp.lang.c++ Date: Tue, 26 Apr 2011 14:30:04 -0400 Message-ID: <2011042614300497308-pete@versatilecodingcom> References: <78f3178b-efdc-4af5-8f84-7ff6fa995af7@e25g2000prf.googlegroups.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: Please disprove this Double-Checked Locking "fix" User-Agent: Unison/2.1.4 Lines: 32 X-Usenet-Provider: http://www.giganews.com X-Trace: sv3-mlRk3Go5+Fse6/feW7mnFEoAbn6Vp8yr/noC3MB1IPD24XLkz4ArggoeenbGtqHTn9IDvHzTEefQrJN!qpxY4gOM84Gp0PfNo5tqQpVkMo1P3g73ABq1hVZ0FtdFVqYYrC0/zQWfTrOzBKhl0UxCL1EU X-Complaints-To: abuse@giganews.com X-DMCA-Notifications: http://www.giganews.com/info/dmca.html X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.40 X-Original-Bytes: 2381 Xref: x330-a1.tempe.blueboxinc.net comp.lang.c++:4380 On 2011-04-26 14:16:33 -0400, Joshua Maurice said: > This is largely due to hardware "reorderings", > but let me quote the paper for the relevant bit: > > [quote] > Nothing you do can alter the fundamental problem: you need to be able > to specify a constraint on instruction ordering, and your language > gives you no way to do it. > [/quote] > > To emphasize, it might be the compiler reordering it, it might be the > hardware reordering it, Let me underscore the problem, as the quotation above misses part of the issue. Even when the instructions are executed in exactly the order that you want them to be executed, different threads can see results in a different order from the order in which the thread doing the stores actually did them. When data is shared between threads and at least one thread is writing that data, all accesses to that data must be synchronized. C++0x says that the behavior of a program that does not synchronize such accesses is undefined. -- Pete Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The Standard C++ Library Extensions: a Tutorial and Reference (www.petebecker.com/tr1book)