C#并行编程-并发集合
2015-12-28 11:26
411 查看
菜鸟学习并行编程,参考《C#并行编程高级教程.PDF》,如有错误,欢迎指正。
C#并行编程-Parallel
C#并行编程-Task
C#并行编程-并发集合
C#并行编程-线程同步原语
C#并行编程-PLINQ:声明式数据并行
背景
基于任务的程序设计、命令式数据并行和任务并行都要求能够支持并发更新的数组、列表和集合。
在.NET Framework 4 以前,为了让共享的数组、列表和集合能够被多个线程更新,需要添加复杂的代码来同步这些更新操作。
如您需要编写一个并行循环,这个循环以无序的方式向一个共享集合中添加元素,那么必须加入一个同步机制来保证这是一个线程安全的集合。
System.Collenctions和System.Collenctions.Generic 名称空间中所提供的经典列表、集合和数组的线程都不是安全的,不能接受并发请求,因此需要对相应的操作方法执行串行化。
下面看代码,代码中并没有实现线程安全和串行化:
View Code
代码中开启了三个并发操作,每个操作都向集合中添加1000条数据,在没有保障线程安全和串行化的运行下,实际得到的数据并没有3000条,结果如下:
View Code
需要注意的是,代码中的输出时间并不能够完全正确的展示出并发代码下的ConcurrentQueue性能,采用ConcurrentQueue在一定程度上也带来了损耗,如下图所示:
View Code
需要注意 TryDequeue 和 TryPeek 的无序性,在多线程下
View Code
View Code
对于并发下的其他集合,我这边就不做代码案列了,大家可以通过下面的链接查看,如有问题,欢迎指正
http://msdn.microsoft.com/zh-cn/library/system.collections.concurrent(v=vs.110).aspx
作者:释迦苦僧 出处:/article/5294248.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
目录
C#并行编程-相关概念C#并行编程-Parallel
C#并行编程-Task
C#并行编程-并发集合
C#并行编程-线程同步原语
C#并行编程-PLINQ:声明式数据并行
背景
基于任务的程序设计、命令式数据并行和任务并行都要求能够支持并发更新的数组、列表和集合。
在.NET Framework 4 以前,为了让共享的数组、列表和集合能够被多个线程更新,需要添加复杂的代码来同步这些更新操作。
如您需要编写一个并行循环,这个循环以无序的方式向一个共享集合中添加元素,那么必须加入一个同步机制来保证这是一个线程安全的集合。
System.Collenctions和System.Collenctions.Generic 名称空间中所提供的经典列表、集合和数组的线程都不是安全的,不能接受并发请求,因此需要对相应的操作方法执行串行化。
下面看代码,代码中并没有实现线程安全和串行化:
View Code
代码中开启了三个并发操作,每个操作都向集合中添加1000条数据,在没有保障线程安全和串行化的运行下,实际得到的数据并没有3000条,结果如下:
View Code
需要注意的是,代码中的输出时间并不能够完全正确的展示出并发代码下的ConcurrentQueue性能,采用ConcurrentQueue在一定程度上也带来了损耗,如下图所示:
View Code
需要注意 TryDequeue 和 TryPeek 的无序性,在多线程下
View Code
View Code
对于并发下的其他集合,我这边就不做代码案列了,大家可以通过下面的链接查看,如有问题,欢迎指正
http://msdn.microsoft.com/zh-cn/library/system.collections.concurrent(v=vs.110).aspx
作者:释迦苦僧 出处:/article/5294248.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
相关文章推荐
- C#基础精华07(委托事件,委托的使用,匿名方法)
- C#基础精华07(委托事件,委托的使用,匿名方法)
- c#自定义液晶数字控件
- C#字符串小知识
- C#基础——加密
- c#继承
- c#结构体
- C#实现Stream与byte[]之间的转换实例教程
- C# byte数组与Image的相互转换
- c#类
- c#面向对象
- C#网页跳转方法总结
- webBrowser捕获Alert内容(C#)
- C#winform webBrowser 实现抓句柄 想输入框中输入内容(笔记)
- C#学习笔记008-继承
- (C#) Tasks 中的异常处理(Exception Handling.)
- c#webBrowser 获取标签值
- C#创建图片验证码
- C#中的is和as操作符
- C#语言基础----值类型