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