随笔分类 -  多线程

多线程
摘要:最近一直在学习C#的多线程编程,发现多线程编程并不容易。在启动访问相同数据的多个线程时,会间歇性地遇到难以发现的问题。下面来讨论与线程相关的问题:争用条件。如果两个或多个线程访问相同的对象,或者访问不同步的共享状态,就会出现争用条件。看下面的例子: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Diagnostics; 6: using System.... 阅读全文
posted @ 2012-09-29 16:45 美梦成真 阅读(1280) 评论(0) 推荐(0)
摘要:任务结束时,它可以把一些有用的状态信息写到共享对象中。这个共享对象必须是线程安全的。另一个选项是使用返回某个结果的任务。使用Task类的泛型版本,就可以定义返回某个结果的任务的返回类型。为了返回某个结果任务调用的方法可以声明为带任意返回类型。示例方法TaskWithResult()利用一个元组返回两个int值。该方法的输入可以是void或object类型,如下所示: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Tex... 阅读全文
posted @ 2012-09-17 12:11 美梦成真 阅读(6973) 评论(0) 推荐(0)
摘要:利用任务连续性,可以在一个任务结束后启动另一个任务。任务也可以构成一个层次结构。一个任务启动一个新任务时,就启动了一个父/子层次结构。下面的代码段在父任务内部新建一个任务。创建子任务的代码与创建父任务的代码相同,唯一的区别是这个任务从另外一个任务内部创建。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; 6: using Syste... 阅读全文
posted @ 2012-09-17 11:29 美梦成真 阅读(6114) 评论(0) 推荐(0)
摘要:通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务。例如,一个使用前一个任务的结果的新任务,如果前一个任务失败了,这个任务就应执行一些清理工作。任务处理程序都不带参数或者带一个对象参数,而任务的连续处理方法都有一个Task类型的参数,这里可以访问起始任务的相关信息:如下面的示例代码: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; ... 阅读全文
posted @ 2012-09-14 17:26 美梦成真 阅读(18256) 评论(0) 推荐(0)
摘要:.NET 4.0包含的新名称空间System.Threading.Tasks,它包含的类抽象出了线程功能。任务表示应完成的某个单元的工作。这个单元的工作可以在单独的线程中运行,也可以以同步的方式启动一个任务,这需要等待主调线程。使用任务不仅可以获得一个抽象层,还可以对底层线程进行许多控制。启动任务 1)、使用TaskFactory类的实例,在其中把TaskMethod()方法传递给StartNew方法,就会立即启动任务。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: ... 阅读全文
posted @ 2012-09-14 14:41 美梦成真 阅读(29870) 评论(5) 推荐(2)
摘要:创建线程需要时间。如果有不同的小任务需要完成,就可以事先创建许多线程,在应完成这些任务的时候发出请求。这个线程数最好在需要更多的线程时增加,在需要释放资源时减少。在.NET Framework中不需要自己创建这样一个列表,该列表由ThreadPool类托管。这个类会在需要时增减线程池中的线程数,直到最大的线程数。池中的最大线程数是可以配置的。在双核CPU中,默认设置为1023个工作线程和1000个I/O线程。也可以指定在创建线程池时应立即启动的最小线程数,以及线程池中可用的最大线程数。如果有更多的作业需要处理,线程池中的线程个数达到了极限,最新的作业就要排队,且必须等待线程完成其任务。 来看. 阅读全文
posted @ 2012-09-11 10:39 美梦成真 阅读(1139) 评论(0) 推荐(0)
摘要:前面一段时间,一直在看<<C#高级编程>>第七版线程、任务和同步这一章的知识。创建线程,除了前面介绍的使用委托创建线程之外,创建线程的第二种方式是使用Thread类创建线程。 1.创建线程 使用Thread类可以创建和控制线程。下面的代码是创建和启动一个新线程的简单例子。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; ... 阅读全文
posted @ 2012-09-10 18:07 美梦成真 阅读(676) 评论(0) 推荐(0)
摘要:异步编程,多线程 阅读全文
posted @ 2012-07-16 21:33 美梦成真 阅读(432) 评论(0) 推荐(0)