C# 线程静态和同步
我有以下代码。这可能是个愚蠢的问题,但我不确定是否需要同步C# 线程静态和同步,c#,multithreading,C#,Multithreading,我有以下代码。这可能是个愚蠢的问题,但我不确定是否需要同步 class MyClass { [ThreadStatic] private static object _staticObject; private static readonly LockStaticField = new object(); public static object StaticObject { get { lock(LockStaticField)
class MyClass
{
[ThreadStatic]
private static object _staticObject;
private static readonly LockStaticField = new object();
public static object StaticObject
{
get
{
lock(LockStaticField)
{
return _staticObject ?? (_staticObject = new object());
}
}
}
}
我知道ThreadStatic
字段不需要任何同步,因为状态不是共享的。但是静态getter和初始化是什么呢
我知道ThreadStatic字段不需要任何同步,因为状态不是共享的。但是静态getter和初始化是什么呢
这也不需要锁定来同步,因为每个线程的数据(备份字段)都是唯一的。你可以在这里安全地取下锁
注意,对于.NET 4,您可能还想考虑使用“代替代码> [TraceStim] < /Cord>”来保存任何本地线程数据。在使用方面(II:)有一些优点,但也可以清除,如您可以调用<代码>处理()/代码>来清理所有线程上的所有实例。
好,让我们考虑一个长时间运行的初始化,这将被调度器明确地插入。(是的,我知道我不应该在getter中调用这样的初始化。这只是一个假设的场景。)@DHN仍然不重要,因为只有该线程会生效,并且在初始化过程中它会被阻塞。