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

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

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

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

01、Read方法

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

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

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

运行结果如下:

因为系统环境原因无法模拟出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次观察每次运行结果,代码如下:

先看下执行结果:

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

只需要把上面代码:

++_incrementValue;

改为:

Interlocked.Increment(ref _incrementValue);

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

03、Decrement方法

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

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

04、Add方法

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

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

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

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

执行结果如下:

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

猜你喜欢

上汽奥迪A5L上市正式售价25.59万 豪华智能新选择(上汽奥迪A5L上市延迟原因)

8月1日,全新上汽奥迪A5L Sportback正式上市,共推出6款车型,售价区间为25.99万至36.99万元。在上市后90天内购车的用户可享受包含4000元限时现金礼遇在内的多重优惠

上汽奥迪A5L上市正式售价25.59万 豪华智能新选择(上汽奥迪A5L上市延迟原因)

这一次,49岁舒淇高调官宣喜讯,她让冯小刚和整个娱乐圈刮目相看

威尼斯电影节的主竞赛单元一向是精英云集,评委们早已见过许多“明星跨界导演”的尝试,但舒淇的《女孩》显然超越了“玩票”之作的范畴,电影中的细腻镜头和情感张力瞬间让影评人闭嘴。这个导演虽然被人诟病为“拍烂片”,却…

这一次,49岁舒淇高调官宣喜讯,她让冯小刚和整个娱乐圈刮目相看

释小龙被爆是王宝强师叔,在少林寺辈分极高,洪金宝是释小龙师弟(释小龙什么身份)

8岁那年,王宝强踏上了少林寺的武术之路,成为了释延宏大师的俗家弟子,而释小龙则在年仅2岁时便正式拜师,剃发受戒,成为少林家谱中的一员。 这一制度不仅让王宝强这样的学员得以接触少林武术,也为不少人提供了学习和了…

释小龙被爆是王宝强师叔,在少林寺辈分极高,洪金宝是释小龙师弟(释小龙什么身份)

铭凡迷你主机限时补贴来了!我挑了4款最值得入手的,真香预警!(centerm迷你主机)

我自己也刚刚入手了一台,用下来体验非常惊喜,所以这次趁活动,把我觉得最值得下手的四款机型简单说说,也当是给大家做个避坑推荐。如果你不需要那么夸张的内存,这一款真的更适合日常工作党。 这次活动一口气就降了8…

铭凡迷你主机限时补贴来了!我挑了4款最值得入手的,真香预警!(centerm迷你主机)

筵席终散:老牌硬件媒体 AnandTech 主站及历史文章已不可用(筵席已散)

8 月 3 日消息,诞生于上个世纪末的老牌硬件媒体 AnandTech 在 2024 年 8 月 30日宣布停止内容更新,但也同时表示该媒体上级出版商 Future 将无限期保留站点本身和所有文章…

筵席终散:老牌硬件媒体 AnandTech 主站及历史文章已不可用(筵席已散)