利用Interlocked实现线程同步
2015-08-05 11:45
337 查看
线程同步有很多种方式,如果只是共享整型数据,可以使用Interlocked进行同步。
下面给出一个例子,来说明如何利用Interlocked进行同步。
看上面这段代码,经过10000次并行循环后,预期sum变量最后的值为10000。然而,由于资源冲突的原因,sum最后的值并不确定,多数情况小于10000。
运行一下,sum每次运行的值都为10000。
下面给出一个例子,来说明如何利用Interlocked进行同步。
一、例子说明
int sum = 0; Parallel.For(1, 10001, i => { sum += 1; }); tbContent.Text = "结果:" + sum;
看上面这段代码,经过10000次并行循环后,预期sum变量最后的值为10000。然而,由于资源冲突的原因,sum最后的值并不确定,多数情况小于10000。
二、解决方案
可以有很多种方式来进行同步,比如专门用一个object对象同步。不过,这里我们使用Interlocked来进行同步,代码如下:int sum = 0; Parallel.For(1, 10001, i => { Interlocked.Increment(ref sum); }); tbContent.Text = "结果:" + sum;
运行一下,sum每次运行的值都为10000。
相关文章推荐
- adb4robotium跨进程框架抛出InputStream cannot be null的异常的解决方案
- SSH服务器与Android通信(2)--Android客户端接收数据
- java 怎样追加文本到远程服务器上的文件,利用ftpclient
- This Android SDK requires Android Developer Toolkit version 23.0.0 or above
- 宽带运营商为什么限制家庭网络上行宽带
- 每隔一段时间获取一次gps信息
- 猜数字小游戏
- 互联网+时代的思考
- 剑指offer:字符串排列
- BW系列之cube
- 初识django
- Jpcap
- PHP iconv 解决utf-8和gb2312编码转换问题
- C语言数组参数与指针参数
- Xcode LaunchImage 载入界面大小设置
- 指向数组的指针和二维数组
- POJ 2528 Mayor's posters
- 【杂感】我理解的产品经理做的是什么?
- mysql 导出数据到csv文件的命令
- Java HttpClient使用小结