C# volatile与lock
C# volatile与lock
C# volatile与lock一、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。
二、C#中lock
1、lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。此语句的形式如下:
Object thisLock = new Object();
lock (thisLock)
{
// Critical code section
}
2、lock确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它就会被阻止,直到该对象被释放。也就是说在用到临界资源,确保线程可以排队进入执行临界区中的方法。
3、lock的使用场景
多个线程同时访问一个代码块,使用lock 修饰该代码块,强制多个线程进行排队,一个接一个的去访问。
1、通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。最佳做法是定义 private 对象来锁定, 或 private static 对象变量来保护所有实例所共有的数据。
- with(nolock)的用法
- cssdisplay覆盖规律(css解决display:inline-block;产生的缝隙间隙的方法)
- Sql Server 更新锁(UPDLOCK)
- display:inline、block、inline-block 的区别
- HTML5<q> 与 <blockquote> 的区别
- sqlserver定时计划(sql server deadlock跟踪的4种实现方法)
- C# volatile与lock
- 去除inline-block元素间的间隙
- RegisterClientScriptBlock与RegisterStartupScript区别
- css样式为什么要有空格(css几种解决inline-block间隙的方案整理)
- python程序锁教程(在python里协程使用同步锁Lock的实例)
- ASP.NET中lock 的用法
- 岳云鹏跟凤凰传奇谈心,说出了人生中最重要的三个人,这才成功(岳云鹏跟凤凰传奇谈心)
- 爱情可以当饭吃吗(爱情能当饭吃吗)
- Top 3 JSHS《运动与健康科学 英文 》跻身SCI体育学期刊世界前三(Top3JSHS运动与健康科学)
- 体坛传媒LOGO全新升级,多元发展迈出坚实步伐(体坛传媒LOGO全新升级)
- 超撩人治愈的绝美水彩,原来出自她之手 一笔一画令无数人沉醉(超撩人治愈的绝美水彩)
- 新手的勾线(新手的勾线)
热门推荐
- pythonsocket教程(python3利用Socket实现通信的方法示例)
- python爬取豆瓣电影评论(python使用requests模块实现爬取电影天堂最新电影信息)
- 织梦内容页编辑使用方法(织梦更新后如何去掉底部的织梦版权信息powered by dedecms)
- python线程池有几种(对python 多线程中的守护线程与join的用法详解)
- python弹跳小球(python实现弹跳小球)
- php脚本控制方法(php swoole多进程/多线程用法示例基于php7nts版)
- jenkins 构建docker镜像(docker搭建jenkins+maven代码构建部署平台)
- 数据类型typescript知多少(一文了解TypeScript数据类型)
- docker安装镜像失败(阿里云镜像安装docker报错的问题及解决方案)
- 织梦首页如何设置指定栏目(详解织梦模板DEDECMS搜索结果调用自定义字段的方法)