[concurrency-interest] Make the double-checked lock idiom broken on x86

Yubin Ruan ablacktshirt at gmail.com
Mon May 8 10:22:19 EDT 2017

Hi, from Bill Pugh's website[1] I read that the double-checked lock idiom is
broken. Bill Pugh gave an example:

    // Broken multithreaded version
    // "Double-Checked Locking" idiom
    class Foo { 
      private Helper helper = null;
      public Helper getHelper() {
        if (helper == null) 
          synchronized(this) {
            if (helper == null) 
              helper = new Helper();
        return helper;
      // other functions and members...

His analysis is convincing, but the code he gave[2] work *well* on x86.
That is expected to break sometimes. But, running it from time to time,
I never see it break.

How to verify that the double-check lock idiom will break on x86?


[1]: https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
[2]: https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckTest.java

More information about the Concurrency-interest mailing list