Interlocked.CompareExchange

class SourceManager
{
private SourceManager() { }

private static SourceManager sourceManager;
public static SourceManager Instance
{
get
{
if (sourceManager == null)
{
/*

lock 实现方式
功能与以下 Interlocked.CompareExchange 相同

lock (this)
{
if (sourceManager == null)
{
sourceManager = new SourceManager();
}
}

*/
Interlocked.CompareExchange<SourceManager>(ref sourceManager, new SourceManager(), null);
}
return sourceManager;
}
}
}

时间: 2024-10-02 09:57:34

Interlocked.CompareExchange的相关文章

【转】【C#】【Thread】Interlocked 轻量级锁

为什么说它是轻量级呢?因为它仅对整形数据(即int类型,long也行)进行同步. 具体使用如下表: Interlocked.Increment(ref value) 数值加一(原子性操作) Interlocked.Decrement(ref value) 数值减一(原子性操作) Interlocked.Exchange(ref value1, value2) 交换:把值2赋给值1:返回新值 Interlocked.CompareExchange(ref value1, value2, value

多线程中的锁系统(二)-volatile、Interlocked、ReaderWriterLockSlim

介绍 上章主要说排他锁的直接使用方式.但实际当中全部都用锁又太浪费了,或者排他锁粒度太大了. 这一次我们说说升级锁和原子操作. 目录 1:volatile 2:  Interlocked 3:ReaderWriterLockSlim 4:总结 一:volatile 简单来说: volatile关键字是告诉c#编译器和JIT编译器,不对volatile标记的字段做任何的缓存.确保字段读写都是原子操作,最新值. 这不就是锁吗?   其这货它根本不是锁, 它的原子操作是基于CPU本身的,非阻塞的. 因

C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent

看下组织结构: System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.Mutex System.Threading.Semaphore System.Threading.EventWaitHandle System.Threading.ManualResetEvent System.Threading.AutoResetEvent System.Object System.Thre

C# Interlocked类的使用

在C#中,赋值和简单的数字运算都不是原子型操作.在多线程环境下,会产生数据安全的问题. 在多线程环境下,我们可以通过使用System.Threading.Interlocked类来实现原子型操作当个数据,使用它比使用Monitor类跟简单. Interlocked类主要方法 方法 作用 CompareExchange() 安全比较两个值是不是相等.如果相等,将第三个值于其中一个值交换 Decrement() 安全递减1,相当于 i-- Exchange() 安全交换数据,相当于 a = 30 I

C#【Thread】Interlocked 轻量级锁

什么说它是轻量级呢?因为它仅对整形数据(即int类型,long也行)进行同步. 具体使用如下表: Interlocked.Increment(ref value) 数值加一(原子性操作) Interlocked.Decrement(ref value) 数值减一(原子性操作) Interlocked.Exchange(ref value1, value2) 交换:把值2赋给值1:返回新值 Interlocked.CompareExchange(ref value1, value2, value3

Interlocked(续)

Interlocked(续) 前言 前面已将主要用来给我扫扫盲,因为本屌才疏学浅,不懂的地方太多了,需要不停的扫盲,不停的学习,本屌并不不奢望能进步多大,只希望能在本屌的百分努力中,收获百分之一.这样本屌就很开心了,学如逆水行舟. 引入 在大多数计算机中,增加变量操作不是一个原子操作,需要执行下列步骤: 1.将实例变量中的值加载到寄存器中. 2.增加或减少该值 3.在实例变量中存储该值 在多线程的环境中,线程会在执行完前两个步骤后被抢走.然后由另一个线程执行所有三个步骤,当第一个线程重新开始执行

线程----轻量级同步Interlocked

字段与属性: 字段通常都是为类的方法所使用,而属性则常用于表示类的状态(比如StringBuilder的  Length),类的能力(比如StringBuilder的 Capacity),方法进行的状态或者阶段 对象的原子性: 对象的状态是一个整体,如果一个字段改变.其他的字段也要同时做出相应的改变.简单  的来说,就是要么不改,要么全改 对象的常量性: 对象的状态一旦确定,就不能再次更改了.如果想再次更改,需要重新构造一个对象  轻量级同步Interlocked 为什么说它是轻量级呢?因为它仅

C# 5.0 与 .Net 4.5 学习(三)Interlocked

Interlocked类是用于对变量进行原子操作的简单语句.如i++不是线程安全,它从内存中获得一个值,然后将这个值加1,然后又将值存回到内存中.这些操作可能被线程调度器中断.Interlocked类就提供了对增.减.改.读的方法的线程安全行为. 使用Interlocked类比其他同步技术更快捷.然而,你只能在简单的同步问题上去使用它. 例如,当赋予someState变量新值时以防值为null我们不使用lock锁,而选择使用更快捷的Interlocked类(代码文件Synchronization

C#线程同步技术(二) Interlocked 类

接昨天谈及的线程同步问题,今天介绍一个比较简单的类,Interlocked.它提供了以线程安全的方式递增.递减.交换和读取值的方法. 它的特点是: 1.相对于其他线程同步技术,速度会快很多. 2.只能用于简单的同步问题. 比叫好理解,不再赘述,给一个我们常用的单例模式的 Interlocked 实现: class SourceManager { private SourceManager() { } private static SourceManager sourceManager; publ