Double checked locking в Android

По мнению многих, несколько распространенная идиома блокировки с двойной проверкой сломана в java, если вы не используете версию 1.5 или более позднюю и не используете ключевое слово volatile.

Пример сломанной блокировки с двойной проверкой:

// 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...
  }

Пример взят из этой статьи, в которой также подробно описано, как ее исправить: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

Приведенный выше анализ Пью относится к виртуальным машинам Java. Я работаю на Android и часто использую библиотеки, в которых применяется Double-Checked Locking. Поддерживает ли модель памяти виртуальной машины dalvik эту идиому?

18
задан emmby 19 April 2011 в 13:26
поделиться