希望得到准确的答案,clr提供的单例模式是否是线程安全的 class A{public static A a=new A();private A()}很多线程同时调用 A.a是否能得到同一个对象(是否线程安全) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是线程安全的,这由Framework来保证 你的代码有点问题,这样才对class A { public readonly static A a=new A(); private A() {}} sealed class A{ public readonly static A a = new A(); private A() { }} 最简单的多线程单例模式//使用.NET类型初始化机制实现多线程Singleton 模式class Singleton{ //内联初始化 public static readonly Singleton instance = new Singleton(); private Singleton() { }}等价于class Singleton{ public static readonly Singleton instance; static Singleton() { instance = new Singleton(); } private Singleton() { }}缺点是构造函数无法传参 更标准的多线程Singleton 模式实现using System;public class Singleton{ //volatile 关键字表示字段可能被多个并发执行线程修改。声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值 private static volatile Singleton instance = null; private static object lockHelper = new object(); //辅助器 private Singleton() { } public static Singleton GetInstance() {//这里double check if (instance == null) { lock (lockHelper) { if (instance == null) { instance = new Singleton(); } } } return instance; }} 此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。 对任何自定义的类型,CLR 只保证类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的。但至于实例成员是否是线程安全,这就需要开发人员来保证。 要按照你这么说,那clr提供的单例就不是线程安全的。你肯定2者等价么? 肯定请参考 李建忠老师 WebCast的设计模式相关资料 小弟求大虾帮助 FTP上传文件 2005的ftp类实现一次连接,传多个文件的问题 我为这个问题哭了好久,大家帮帮我 反射问题 一运行程序CUP马上飙到60%,而且程序动不了,请教高手 数据长度 VS 2012 的Blend工具,触发器在哪里? 往Visual Studio 2010中添加DockPanel控件 在winform里如何将一个数据库表中的记录执行过seclect后再倒到另一个表中?急啊!高手快帮帮我吧!分不够可以加! VS2005下,ListBox的怪问题。急!!!!! [asp.net] DbParameters 怎样实例化
class A
{
public readonly static A a=new A();
private A() {}
}
{
public readonly static A a = new A();
private A() { }
}
//使用.NET类型初始化机制实现多线程Singleton 模式
class Singleton
{
//内联初始化
public static readonly Singleton instance = new Singleton(); private Singleton() { }
}
等价于class Singleton
{
public static readonly Singleton instance; static Singleton()
{
instance = new Singleton();
}
private Singleton() { }
}缺点是构造函数无法传参
using System;public class Singleton
{
//volatile 关键字表示字段可能被多个并发执行线程修改。声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值
private static volatile Singleton instance = null;
private static object lockHelper = new object(); //辅助器
private Singleton() { } public static Singleton GetInstance()
{
//这里double check
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
要按照你这么说,那clr提供的单例就不是线程安全的。你肯定2者等价么?