c# 单例模式 多线程
时间: 2023-07-25 19:48:32 浏览: 103
在 C# 中实现单例模式可以使用以下代码:
```csharp
public class Singleton
{
private static Singleton instance;
private static readonly object padlock = new object();
private Singleton() { }
public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
}
```
这里使用了双重检查锁定来确保线程安全。在访问 `Instance` 属性时,如果 `instance` 为 `null`,则在加锁的情况下创建一个新实例。由于加锁操作可能会影响性能,所以使用双重检查锁定来避免不必要的锁定。
相关问题
C# 单例模式,加锁实现多线程安全,给个示例代码
C# 中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。为了防止多线程环境下的并发问题,可以采用双重检查锁定(DCL)的方式来实现线程安全的单例。这种方式只有在第一次获取实例时才加锁,提高了效率。
以下是使用双重检查锁定的线程安全单例模式的示例代码:
```csharp
using System;
using System.Threading;
public class Singleton
{
private static volatile Singleton _instance;
private static readonly object padlock = new object();
// 这里构造函数是私有的,保证外部无法直接创建新的实例
private Singleton()
{
// 防止多个线程同时初始化
}
// 获取唯一实例的同步方法
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (padlock)
{
if (_instance == null)
{
_instance = new Singleton();
}
}
}
return _instance;
}
}
}
// 示例如何使用:
Singleton myInstance = Singleton.Instance; // 只会创建一次
```
阅读全文