Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 线程静态和同步_C#_Multithreading - Fatal编程技术网

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仍然不重要,因为只有该线程会生效,并且在初始化过程中它会被阻塞。