代码改变世界

随笔档案-2011年04月

.Net 4.0 Parallel 编程(九)Task中的数据共享(下)

2011-04-21 10:17 by Henry Cui, 2978 阅读, 收藏, 编辑
摘要: 在上篇Post中我们看过了几种常用的同步类型,本篇文章会介绍下申明性的同步的实现以及对于集合类型数据共享的问题,首先看下申明性同步的实现。 申明性同步 我们可以通过使用Synchronization 特性来标识一个类,从而使一个类型的字段以及方法都实现同步化。在使用Synchronization 时,我们需要将我们的目标同步的类继承于System.ContextBoundObject类型。我们来看看之前的例子我们同步标识Synchronization 的实现: [Synchronization]class SumClass : ContextBoundObject{ private int _ 阅读全文

.Net 4.0 Parallel编程(八)Task中的数据共享(中)

2011-04-12 22:41 by Henry Cui, 2438 阅读, 收藏, 编辑
摘要: 在上篇文章中我们看过了多线程中的数据共享问题,以及通过分离执行来解决的办法。本篇文章就数据共享的同步处理中的一些常见的方法进行一些介绍。 数据同步时的步骤 我之前的文章我们对数据共享问题处理的方式是“分离执行”,我们通过把每个Task执行完成后的各自计算的值进行最后的汇总,也就是说多个Task之间不存在数据共享了,各自做各自的事,完全分离开来。可是这毕竟不是我们常规的处理办法,这样我们会花更多的经历在分离上。其实我们主要的数据共享在Sum上: for (int j = 0; j < 1000; j++){ Sum++;}那我们可以通过一种有序的机制来访问Sum,即当一个Task在进行Su 阅读全文

.Net 4.0 Parallel 编程(七)Task中的数据共享(上)

2011-04-07 13:08 by Henry Cui, 2871 阅读, 收藏, 编辑
摘要: 在前几篇文章中我们看过Parallel Loop以及Task 部分内容,而在多线程的编程中我们较为痛疼的就是多线程中的数据共享问题以及数据同步的问题。本篇Post以及后面的几篇Post中会探讨下TPL中数据共享的常见问题以及其常规的解决办法。 引例 首先我们来看下面的一段代码: static void Main(string[] args){ int Sum = 0; Task[] tasks = new Task[10]; for (int i = 0; i < 10; i++) { tasks[i] = new Task(() => { for (int j = 0; j &l 阅读全文
点击右上角即可分享
微信分享提示