并发编程 - 线程同步(三)之原子利用Interlocked简介

千千梦丶琪  金牌会员 | 2025-2-12 15:00:43 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 859|帖子 859|积分 2577

上一章我们了解了3种处理多线程中共享资源安全的方法,今天我们将更近一步,学习一种针对简单线程同步场景的解决方案——Interlocked。

在此之前我们先学习一个概念——原子利用。
01、原子利用

原子利用,其概念源于化学领域,原子是构成化学元素的普通物质的最小单元;原子也是化学变化中最小的粒子及元素化学性子的最小单元。
借鉴到编程语言中原子利用指:不可分割的利用单元,是指一类不可停止的利用,它在实行时要么全部实行,要么全部不实行,不会被其他利用打断,而实行结果要么全部乐成,要不全部失败,没有其他状态。
我们再回忆一下我们学习线程同步的目标——确保多个线程在访问共享资源时能够按顺序、安全地进行利用,从而避免并发实行带来的数据竞争不一致的状态。
可以说原子利用天然的解决了多线程共享资源安全问题。
在C#语言中,Interlocked类提供了一系列可以进行原子利用的工具。
02、Interlocked实现原理

Interlocked的原子利用是基于CPU本身实现,是硬件级别的原子指令封装,并且它不需要显式的线程壅闭,因此比传统的锁机制(如互斥锁、信号量等)效率更高,尤其是在高并发的场景下。
线程壅闭是指利用体系把当前线程从运行状态变动为壅闭状态,并且利用体系会把当前线程占用的CPU时间片分配给其他线程,使当前线程尽可能少的占用CPU时间。在分配CPU时间片时会涉及上下文切换等利用。
因此Interlocked的非壅闭特性,严格意义上来说并不是锁,但是效率却比锁高得多。
另外假如一个方法在CPU层面上被设计为对立不可分割的指令,那么它本质上就是原子的,严格的原子性可以阻止任何抢占的可能。因此在32位CPU中,一个利用数的大小为32位,因此可以提供32位即4个字节大小及以内的数据范例(如int,float)进行读写的原子利用。同理64位CPU,则可以提供64位级8个字节大小及以内的数据范例(如long,double)进行读写的原子利用。
其实在上一章也举个一个例子,在32位CPU环境下利用long范例,多线程情况下会出现线程不完全问题,因为对于32位CPU,利用一次long范例数据至少需要两个原子指令,因此就会出现线程安全问题。
03、Interlocked常用方法

Interlocked方法从.NET Framework 1.1到现在最新的.NET 9也经历了长足的发展和完善。可以总结为:支持的利用范例在增长,利用能力也再增长,由早期的简单递增、递减、替换利用到如今的复杂位利用,内存屏障利用等。
下面我们先整体了解一下Interlocked有那些方法。


  • Read: 原子的读取64位值;
  • Increment: 原子的递增指定的变量,并返回递增后的新值;
  • Decrement: 原子的递减指定的变量,并返回递减后的新值;
  • Add: 原子的对两个变量求和,将第一个变量替换为两者和,并返回利用后第一个变量的新值;
  • Exchange: 原子的交换两个变量,并返回第一个变量的原始值;
  • Exchange: Exchange方法的泛型版本;
  • CompareExchange: 原子的比力第一个变量和第三个变量是否相称,假如相称,则将第一个变量替换为第二个变量值,并返回第一个变量的原始值;
  • CompareExchange: CompareExchange方法的泛型版本;
  • And: 原子的对两个变量进行按位与利用,将第一个变量替换为利用结果,并返回第一个变量的原始值;
  • Or: 原子的对两个变量进行按位或利用,将第一个变量替换为利用结果,并返回第一个变量的原始值;
  • MemoryBarrier: 强制实行内存屏障,作用范围当前线程,无返回值;
  • MemoryBarrierProcessWide: 提供进程范围的内存屏障,确保任何 CPU 的读取和写入无法跨屏障移动;
背面我们将详细讲解每个方法的如何使用。
:测试方法代码以及示例源码都已经上传至代码库,有爱好的可以看看。https://gitee.com/hugogoos/Planner

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表