2010-12-08 2 views
1

Я смущаю себя, просматривая документацию Microsoft по Lazy <T> (bool).Lazy <T> (bool) Документация конструктора

Параметр описывается как:

isThreadSafe: истинно, чтобы сделать этот экземпляр использоваться одновременно несколькими потоками; false, чтобы сделать экземпляр пригодным для использования только по одному потоку за раз.

Если код, который я обычно пишу в аксессора:

If _rulesCache Is Nothing Then 

    SyncLock (_lockRulesCache) 

     If _rulesCache Is Nothing Then 

      _rulesCache = New RulesCache() 

     End If 

    End SyncLock 

End If 

Return _rulesCache 

Хочу ли я использовать Правда или Ложь в конструкторе типа ленивых?

Private _rulesCache As New Lazy(Of RulesCache)(**?**) 

Так что мой аксессор становится:

Return _rulesCache.Value 

1) После того, как объект создан, он может обрабатывать множественный доступ с резьбой внутри.

2) Мне просто нужно убедиться, что если несколько потоков попадают в аксессуар близко к одновременно, и объект не существует, он создается только один раз.

Согласно документации, утверждение 1 подразумевает, что параметр должен быть ложным. Утверждение 2 означает, что параметр должен быть истинным.

Я чувствую, что я слишком задумываюсь об этом, и это только меня смущает. Или два приведенных выше высказывания действительно противоречат друг другу, и я должен просто придерживаться ручной блокировки для управления созданием объекта?

ответ

2

Утверждение 2 является требуемой интерпретацией. Параметр не влияет на поведение объекта после завершения ленивой инициализации; он только предотвращает случайные гонки двух потоков и создает их два раза. Вы можете проверить это в Reflector, если вам интересно.

+0

Таким образом, я должен интерпретировать значение isThreadSafe как то, должен ли ожидать экземпляр Lazy и обрабатывать несколько потоков, пытающихся создать его экземпляр одновременно (true), или если он используется в среде с одним потоком, где он может использовать код, оптимизированный только для один поток, создающий его (false). Да? – ulty4life 2010-12-08 04:06:03

Смежные вопросы