Это потокобезопасный способ инициализации [ThreadStatic]?

[ThreadStatic]
приватная статическая Foo _foo;

public static Foo CurrentFoo {
   получить {
     if (_foo == null) {
         _foo = new Foo();
     }
     вернуть _foo;
   }
}

Предыдущий поток кода безопасен? Или нам нужно заблокировать метод?

2 ответа

Решение

Если его ThreadStatic есть одна копия на поток. Так что, по определению, его поток безопасен.

В этом блоге есть хорошая информация о ThreadStatic.

[ThreadStatic] это магия компилятора / языка для локального хранилища потоков. Другими словами, он связан с потоком, поэтому даже если есть переключение контекста, это не имеет значения, потому что никакой другой поток не может получить к нему доступ напрямую.

Другие вопросы по тегам