您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

线程安全C#单例模式

线程安全C#单例模式

与简单指针检查相比,执行锁定 非常 昂贵instance != null

您在此处看到的模式称为“ 双重检查锁定”。它的目的是避免只需要一次(第一次访问单例时)的昂贵的锁定操作。之所以这样实现是因为它还必须确保在初始化单例时不会有线程争用条件导致的错误

可以这样考虑:仅当答案为“是,对象已被构造”时,才可以进行裸null检查(不带lock),以提供正确的可用答案。但是,如果答案是“尚未构建”,那么您将没有足够的信息,因为您真正想知道的是它“尚未构建,并且没有其他线程打算在不久后构建它 ”。因此,您将外部检查用作非常快速的初始测试,并且仅在答案为“否”的情况下,才启动正确的,无错误但“昂贵的”过程(锁定然后检查)。

The above implementation is good enough for most cases, but at this point it’s a good idea to go and read Jon Skeet’s article on singletons in C# which also evaluates other alternatives.

c# 2022/1/1 18:18:39 有681人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶