Interlocked

MSDN 描述:为多个线程共享的变量提供原子操作。主要函数如下:

Interlocked.Increment    原子操作,递增指定变量的值并存储结果。
Interlocked.Decrement       原子操作,递减指定变量的值并存储结果。
Interlocked.Add        原子操作,添加两个整数并用两者的和替换第一个整数

Interlocked.CompareExchange(ref a, b, c);  原子操作,a参数和c参数比较,  相等b替换a,不相等不替换。

下面是个interlock anything的例子:

public static int Maximum(ref int target, int value)
{
int currentVal = target, startVal, desiredVal; //记录前后值
do
{
startVal = currentVal; //记录循环迭代的初始值。
desiredVal = Math.Max(startVal, value); //基于startVal和value计算期望值desiredVal //高并发下,线程被抢占情况下,target值会发生改变。 //target startVal相等说明没改变。desiredVal 直接替换。
currentVal = Interlocked.CompareExchange(ref target, desiredVal, startVal); } while (startVal != currentVal); //不相等说明,target值已经被其他线程改动。自旋继续。
return desiredVal;
}

最新文章

  1. arcgis server之路网服务发布
  2. Android 进程常驻(使用第三方MarsDaemon)(虽然不可用,但是还是保留下。)
  3. Leetcode: 4Sum II
  4. Gson解析数组多类型元素
  5. Android NDK
  6. iOS网络-01-NSURLRequest与NSURLConnection
  7. linux设备驱动归纳总结(四):2.进程调度的相关概念【转】
  8. 使用讯飞SDK,实现文字在线合成语音
  9. Oracle 面试宝典 - General Questions
  10. C# Best Practices - Define Fields Appropriately
  11. android 权限管理和签名 实现静默卸载
  12. 微信小程序之点击列表的item带参数跳转界面
  13. jupyter依赖tornado版本
  14. Could not initialize class utils.JdbcUtils
  15. 朗科32G TF卡的读写测试
  16. 【论文笔记】Domain Adaptation via Transfer Component Analysis
  17. 动态产生DataSource------待整理
  18. JSESSIONID、SESSION、cookie .
  19. [转]Outlook HTML渲染
  20. [PA2014]Pakowanie

热门文章

  1. vue 弹窗式 滑动图片验证码
  2. 为什么ROC曲线不受样本不均衡问题的影响
  3. 基于python的人脸识别(检测人脸、眼睛、嘴巴、鼻子......)
  4. SVG动画示例
  5. Linux 验证当前 Video0 不否是v4l设备 linux v4l 编程(1) Video 4 Linux 简介
  6. osg::NodeVisitor example
  7. osg model
  8. Python - Django - 作者表多对多关联书籍表
  9. MySQL中表的列结构的修改操作
  10. jquery iframe取得元素与自适应高度