Interlocked
2024-08-31 18:40:01
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;
}
最新文章
- arcgis server之路网服务发布
- Android 进程常驻(使用第三方MarsDaemon)(虽然不可用,但是还是保留下。)
- Leetcode: 4Sum II
- Gson解析数组多类型元素
- Android NDK
- iOS网络-01-NSURLRequest与NSURLConnection
- linux设备驱动归纳总结(四):2.进程调度的相关概念【转】
- 使用讯飞SDK,实现文字在线合成语音
- Oracle 面试宝典 - General Questions
- C# Best Practices - Define Fields Appropriately
- android 权限管理和签名 实现静默卸载
- 微信小程序之点击列表的item带参数跳转界面
- jupyter依赖tornado版本
- Could not initialize class utils.JdbcUtils
- 朗科32G TF卡的读写测试
- 【论文笔记】Domain Adaptation via Transfer Component Analysis
- 动态产生DataSource------待整理
- JSESSIONID、SESSION、cookie .
- [转]Outlook HTML渲染
- [PA2014]Pakowanie
热门文章
- vue 弹窗式 滑动图片验证码
- 为什么ROC曲线不受样本不均衡问题的影响
- 基于python的人脸识别(检测人脸、眼睛、嘴巴、鼻子......)
- SVG动画示例
- Linux 验证当前 Video0 不否是v4l设备 linux v4l 编程(1) Video 4 Linux 简介
- osg::NodeVisitor example
- osg model
- Python - Django - 作者表多对多关联书籍表
- MySQL中表的列结构的修改操作
- jquery iframe取得元素与自适应高度