缘起:

假设有一个类myClass, myclass里有一个count属性.

在多线程的环境下 每个线程中 直接使用count++,  如果两个线程并行执行时, 两个线程中的一个的结果会被覆掉, 非线程安全.

这里可以用interlocked.compareExchanged 来确保它的原子性. 代码如下

public class myclass
{public int count{set;get;}public int Add(int addend){do{init = Count;result = init + addend;    }     //当init == count时, init = result;  返回init;//当init !=count时, init 不变化    返回init;while( init !=interlocked.compareExchanged(ref Count, result ,init )  )}}

转载于:https://www.cnblogs.com/nocanstillbb/p/10435548.html

C#原子性运算 interlocked.compareExchanged相关推荐

  1. C#多线程编程系列(三)- 线程同步

    目录 1.1 简介 1.2 执行基本原子操作 1.3 使用Mutex类 1.4 使用SemaphoreSlim类 1.5 使用AutoResetEvent类 1.6 使用ManualResetEven ...

  2. java虚拟机第三版学习

    java 编译执行流程 Java 源文件->编译器->字节码文件->JVM->机器码 Java 内存区域与内存溢出异常 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存 ...

  3. 当初我要是这么学习JVM就好了「附图文解析」

    文章目录 1. JVM 简介 2. JVM 运行流程 3. JVM 运行时数据区 3.1 程序计数器「线程私有」 3.2 Java虚拟机栈「线程私有」 3.3 本地方法栈「线程私有」 3.4 堆「线程 ...

  4. C# Interlocked 笔记

    无锁代码下,在读写字段时使用内存屏障往往是不够的.在 64 位字段上进行加.减操作需要使用Interlocked工具类这样更加重型的方式.Interlocked也提供了Exchange和Compare ...

  5. Redis API的原子性分析

    在学习Redis的常用操作时,经常看到介绍说,Redis的set.get以及hset等等命令的执行都是原子性的,但是令自己百思不得其解的是,为什么这些操作是原子性的? 原子性 原子性是数据库的事务中的 ...

  6. 【Java 并发编程】线程操作原子性问题 ( 问题业务场景分析 | 使用 synchronized 解决线程原子性问题 )

    文章目录 总结 一.原子性问题示例 二.线程操作原子性问题分析 三.使用 synchronized 解决线程原子性问题 总结 原子操作问题 : 线程中 , 对变量副本 count 进行自增操作 , 不 ...

  7. C#多线程编程(6)--线程安全2 互锁构造Interlocked

    在线程安全1中,我介绍了线程同步的意义和一种实现线程同步的方法:volatile.volatile关键字属于原子操作的一种,若对一个关键字使用volatile,很多时候会显得很"浪费&quo ...

  8. 并发编程-05线程安全性之原子性【锁之synchronized】

    文章目录 线程安全性文章索引 脑图 概述 原子性synchronized 修饰的4种对象 修饰代码块 作用范围及作用对象 Demo 多线程下 同一对象的调用 多线程下不同对象的调用 修饰方法 作用范围 ...

  9. 并发编程:原子性问题,可见性问题,有序性问题。

    以下是本文的目录大纲: 一.内存模型的相关概念 二.并发编程中的三个概念 三.Java内存模型 一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中, ...

  10. java内存模型 原子性_Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)...

    JVM运行时内存结构回顾 在JVM相关的介绍中,有说到JAVA运行时的内存结构,简单回顾下 整体结构如下图所示,大致分为五大块 而对于方法区中的数据,是属于所有线程共享的数据结构 而对于虚拟机栈中数据 ...

最新文章

  1. C++回声服务器_5-多进程版本
  2. Javascript 思维导图
  3. 后台nodejs程序如何主动推送数据给浏览器
  4. Eclipse里修改SVN的用户名和密码
  5. HTML--HTML对象的关于位置和大小的属性的图解
  6. c字符串中包含双引号_必须知道的C语言知识细节:单引号和双引号正确用法
  7. ORACLE 小时值必须介于1和12之间 解决方法
  8. ecs 云服务器 管理控制台_阿里云ECS服务器监控资源使用情况
  9. 武汉往事之撰写的SAP软文被微信公众号充公
  10. linux故障模式,Linux操作系统出现严重故障后的救援模式
  11. 在 Centos6/RHEL6 上恢复 ext4 文件系统下误删除的文件
  12. 2021第四届浙江省大学生网络与信息安全竞赛预赛部分Writeup
  13. 游戏策划学习(一)游戏研发基础
  14. 俄罗斯黑客太疯狂,破解赌场算法,全球捞钱……
  15. 中国版自动驾驶分级出炉!没有自动驾驶明星公司参与制定
  16. 学Python人工智能有发展前景吗?人工智能就业方向有哪些?
  17. PATA1052 Linked List Sorting (25 分)
  18. oracle dbms_repair,DBMS_REPAIR的使用
  19. 【九章算法】-动态规划
  20. 计算机网络的管理分析,计算机网络管理软件的分析研究

热门文章

  1. 程序员必看—程序员如何高效提升自己?
  2. 快来,这里不仅有帅哥,还有美女!!
  3. datagridview第一列不显示_这些平时你不常用的Excel技巧,它的功能却是强大的
  4. 阿里45K高级Java岗,必备技能清单
  5. linux下网络配置 命令
  6. bzoj1355——2016——3——15
  7. 初学knockoutjs记录5——Computed observables依赖监控(2 Writable computed observables可写计算监控属性)...
  8. GitHub上IOS开源项目
  9. EEPlat的元数据驱动的运行引擎
  10. 文件间调用变量(extern,include)[转]