9
[ThreadStatic] private static Foo _foo; public static Foo CurrentFoo { get { if (_foo == null) { _foo = new Foo(); } return _foo; } }
以前的代碼線程安全嗎?或者我們需要鎖定方法嗎?這是一個線程安全的方式來初始化一個[ThreadStatic]?
[ThreadStatic] private static Foo _foo; public static Foo CurrentFoo { get { if (_foo == null) { _foo = new Foo(); } return _foo; } }
以前的代碼線程安全嗎?或者我們需要鎖定方法嗎?這是一個線程安全的方式來初始化一個[ThreadStatic]?
如果它的ThreadStatic每個線程有一個副本。所以,根據定義,它的線程安全。
一個[ThreadStatic]
是線程本地存儲編譯器/語言的魔力。換句話說,它綁定到線程,所以即使有上下文切換也沒關係,因爲沒有其他線程可以直接訪問它。
這就是我的例子來自哪裏。我只是想弄清楚是否有可能讓一個線程得到_foo == null,但然後發生線程切換,並且另一個線程_foo即使它不爲空也會被新建起來? – 2009-07-06 16:16:09