当前位置:首页 > 青鸟知识 > net

C# volatile与lock

来源:长沙it培训学院 发布日期:2016-05-21

1、C#中volatile

volatile是C#顶用于节制同步的关头字,其意义是针对法式中一些敏感数据,不答应多线程同时拜候,包管数据在任何拜候时辰,最多有一个线程拜候,以包管数据的完整性,volatile是润饰变量的润饰符。


1、volatile的应用场景

多个线程同时拜候一个变量,CLR为了效能,答应每一个线程中止当地缓存,这就致使了变量的纷歧致性。volatile就是为体会决这个标题,volatile润饰的变量,不答应线程中止当地缓存,每一个线程的读写都是直接支配在同享内存上,这就包管了变量不断具有分歧性。



2、volatile 关头字可应用于以下类型的字段

(1)、援用类型

(2)、整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。

(3)、具有整数基类型的罗列类型。

(4)、已知为援用类型的泛型类型参数。

(5)、不克不及将局部变量声明为 volatile。


2、C#中lock


1、lock 关头字将语句块标识表记标帜为临界区,方式是取得给定对象的互斥锁,实行语句,然后释放该锁。此语句的形势以下:

Object thisLock = new Object();lock (thisLock){    // Critical code section}

2、lock确保当一个线程位于代码的临界区时,另外一个线程不进进临界区。若是其他线程试图进进锁定的代码,则它就会被制止,直到该对象被释放。也就是说在用莅临界资本,确保线程能够列队进进实行临界区中的方式。


3、lock的应用场景

多个线程同时拜候一个代码块,应用lock 润饰该代码块,强迫多个线程中止列队,一个接一个的往拜候。


1、但凡,应避免锁定 public 类型,不然实例将超越代码的节制范围。最好做法是界说 private 对象来锁定, 或 private static 对象变量来庇护一实在例所共有的数据。



拒绝套路 试听有礼

数据已加密保证您的信息安全