C#静态构造函数线程安全吗?

换句话说,此Singleton实现线程是否安全

public class Singleton

{

private static Singleton instance;

private Singleton() { }

static Singleton()

{

instance = new Singleton();

}

public static Singleton Instance

{

get { return instance; }

}

}

回答:

在创建类的任何实例或访问任何静态成员之前,保证静态构造函数在每个应用程序域仅运行一次。https://docs.microsoft.com/zh-

cn/dotnet/csharp/programming-guide/classes-and-structs/static-

constructors

所示的实现对于初始构造是线程安全的,也就是说,构造Singleton对象不需要进行锁定或空测试。但是,这并不意味着实例的任何使用都将被同步。有很多种方法可以做到这一点。我在下面显示了一个。

public class Singleton

{

private static Singleton instance;

// Added a static mutex for synchronising use of instance.

private static System.Threading.Mutex mutex;

private Singleton() { }

static Singleton()

{

instance = new Singleton();

mutex = new System.Threading.Mutex();

}

public static Singleton Acquire()

{

mutex.WaitOne();

return instance;

}

// Each call to Acquire() requires a call to Release()

public static void Release()

{

mutex.ReleaseMutex();

}

}

以上是 C#静态构造函数线程安全吗? 的全部内容, 来源链接: utcz.com/qa/417283.html

回到顶部