并发编程 - 线程同步(四)之原子操作Interlocked详解一

上一章我们了解了原子操作Interlocked类的设计原理及简单介绍,今天我们将对Interlocked的使用进行详细讲解。

今日霍州(www.jrhz.info)©️

在此之前我们先学习一个概念——原子操作。

01、Read方法

该方法用于原子的读取64位值,有分别针对long类型和ulong类型的两个重载方法;

对于64位系统,64位数据类型的读取本身就是原子操作;而对于32位系统,64位数据类型的读取需要至少两个原子指令,因此在32位系统可以通过Read方法对64位数据类型进行原子读取。

用法也很简单,示例如下:

今日霍州(www.jrhz.info)©️

运行结果如下:

今日霍州(www.jrhz.info)©️

因为系统环境原因无法模拟出32位系统效果,因此这里只是给了个简单使用示例。

02、Increment方法

该方法用于原子的递增指定的变量,并返回递增后的新值。该方法有4个重载方法,分别为long、ulong、int和uint四种数据类型;该方法适用于多线程环境中需要安全递增变量的场景,如计数器、资源管理等。

对于加法操作,无论是i+1,还是i++或++i,都不是线程安全的,最终可能会生成3条CPU指令,整个操作过程大致如下:

1.将 i 的值加载到寄存器,即从内存中读取i;

2.将寄存器中值加1,即i值加1;

3.最后将寄存器中值回写到i,即完成i值的变更;

而在这编码层面为1行代码,而CPU层面为3行指令的操作中,随时都有可能被线程调度器打断,而导致其他线程同时对i进行操作,最终导致竞争条件,最后数据错乱。

下面我们来举个例子,启动100个线程,分别对一个共享变量进行1000次递增1,最后打印出共享变量,运行这个示例9次观察每次运行结果,代码如下:

今日霍州(www.jrhz.info)©️

先看下执行结果:

今日霍州(www.jrhz.info)©️

可以发现每次的运行结果都不相同,并且结果也不对。这就是因为++i操作并不是原子操作,是线程不安全的。

只需要把上面代码:

++_incrementValue;

改为:

Interlocked.Increment(ref _incrementValue);

即可解决上面的问题,修改过后,我们再来看看执行结果:

今日霍州(www.jrhz.info)©️

03、Decrement方法

该方法用于原子的递减指定的变量,并返回递减后的新值。该方法同样有4个重载方法,分别为long、ulong、int和uint四种数据类型;

该方法和Increment方法基本一样,区别就是一个是递增一个是递减,因此用法可以直接参考Increment方法,这里就不做详细讲解了。

04、Add方法

该方法用于原子的对两个变量求和,将第一个变量替换为两者和,并返回操作后第一个变量的新值。该方法同样有4个重载方法,分别为long、ulong、int和uint四种数据类型;

虽然这个方法叫求和是加法,但是只需要把第2个参数变为负数,既可以实现减法。简单来说该方法可以实现原子的对两个变量求和与求差。

上面Increment方法和Decrement方法,只能对变量每次进行递增递减1,而能随意加减,可以通过Add方法实现两个变量进行加减。

下面我们用代码实现累加和累减示例用来说明Add使用方法,就不展示线程安全差异了,可以参考Increment方法中的示例,自己写一个线程不安全的示例。

今日霍州(www.jrhz.info)©️

执行结果如下:

今日霍州(www.jrhz.info)©️

特别声明:[并发编程 - 线程同步(四)之原子操作Interlocked详解一] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

古畑任三郎1-2季+绅士刑警1-2季+特别篇,这4碟套装值得收藏吗?(古畑任三郎第一季1994)

古畑任三郎和绅士刑警是经典的刑侦剧系列,其1-2季+特别篇4碟套装深受影迷喜爱。本文分析该套装的价值、亮点、适合人群及收藏建议,帮助您明智选择。无论您是侦探剧爱好者还是影视收藏家,了解这些信息都能为您带来启发。

古畑任三郎1-2季+绅士刑警1-2季+特别篇,这4碟套装值得收藏吗?(古畑任三郎第一季1994)

73岁三浦友和现状:不住豪宅不靠儿孙,只想陪着山口百惠安静老去(73岁三浦友和现身戛纳)

三浦友和和山口百惠这对老夫妻呀,最近又悄悄成了话题。外头议论纷纷,说她“下嫁”了,可她心里透亮得很——在自传里她写,就想踏踏实实过普通人的日子。三浦拍完戏就回家陪妻子遛狗、逛超市,偶尔做做陶艺;山口百惠则埋头…

73岁三浦友和现状:不住豪宅不靠儿孙,只想陪着山口百惠安静老去(73岁三浦友和现身戛纳)

光明村的新媳妇称会介绍朋友嫁过来 光明村的户口说出去大家都羡慕(光明村的新媳妇叫什么)

1月29日,刘强东为老家宿迁来龙镇光明村村民们送的年货开始发放。一对“00后”新婚夫妇在现场领到了今年的年货。小裴介绍,自己是去年10月嫁到光明村的,知道老公户口是光明村的时候很惊讶,之前都是在网上看到他们发年货,现在居然也拿到了。”在今

光明村的新媳妇称会介绍朋友嫁过来 光明村的户口说出去大家都羡慕(光明村的新媳妇叫什么)

钱再多也没有什么用?76岁的『刘晓庆』,已经走上另一条的路!(钱再多有什么用说说)

如今已是76岁的她,照理说,早该安享晚年、养花养鸟,悠然自得,可她却依旧活跃在片场,像个年轻人一样,拍戏拍得不亦乐乎,甚至在受伤之后依旧坚持工作,不肯停下脚步。现在的『刘晓庆』,已经很少出演大制作电影,大多是些不…

钱再多也没有什么用?76岁的『刘晓庆』,已经走上另一条的路!(钱再多有什么用说说)

浙江省人大常委会原副主任被双开 严重违纪违法受惩处(浙江省人大常委会副主任是什么级别)

经中共中央批准,中央纪委国家监委对浙江省人大常委会原党组副书记、副主任高兴夫严重违纪违法问题进行了立案审查调查。经查,高兴夫丧失理想信念,背弃初心使命,搞投机钻营,结交政治骗子,对抗组织审查,搞迷信活动

浙江省人大常委会原副主任被双开 严重违纪违法受惩处(浙江省人大常委会副主任是什么级别)