摘要: 上篇已经讲到Task 的默认的TaskScheduler 为ThreadPoolTaskScheduler. 这时我们回到原来的task 的start方法,在代码最后,调用了 ScheduleAndStart(true) 这个方法。接着看这个方法 开始先做契约参数认证,接着保护数值判断。我们要看的是 阅读全文
posted @ 2017-04-06 14:42 ENUO 阅读(895) 评论(4) 推荐(1) 编辑
摘要: 平时我们开发中,经常使用Task,后续的.net版本种很多都和Task有关,比如asyn,await有了Task 我们很少就去关注Thread 了。Task 给我们带来了很多的便利之处。是我们更少的去关注执行的历程,更多的去关注逻辑。但是有些时候,有些应用。又不得不考虑task 的运行状况,比如这个 阅读全文
posted @ 2017-04-05 16:53 ENUO 阅读(3753) 评论(1) 推荐(3) 编辑
摘要: 互斥体MutexMutex是同步基元,他只向一个线程授予队共享资源的独占访问权.如果线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放互斥体.首先来看Mutex类的定义.1 public sealed class Mutex : WaitHandle2 {3 public static Mutex OpenExisting(string name);4 public void ReleaseMutex();5 public MutexSecurity GetAccessControl();6 public void SetAcce... 阅读全文
posted @ 2011-12-11 16:06 ENUO 阅读(1619) 评论(0) 推荐(1) 编辑
摘要: 互斥与同步今天我们来看互斥与同步,互斥与同步一直线程操作方面的至关重要的一部份.首先来看下他们之间的概念.互斥和同步都是在并发环境下编程特有的问题.并发是指宏观上多个线程同时进行而某一时刻只有一个线程运行,即宏观并行微观串行.大家应该都知道时间片的概念,上面的话应该很容易理解的.并发环境下,不能有两个以上(包括两个)某类特殊的资源,就叫互斥.这类特殊资源也被称为临界资源,例如字符串缓冲区,文件,实例对象等.同步是指多个线程互相通信,互相等待从而使进程按照一定顺序往前推进.其实特殊的资源应该就是经常用到的变量与对象只不过在某一时刻只能由一个线程操作他.1.互斥.NET公共运行库提供了几种方法实现 阅读全文
posted @ 2011-12-09 12:54 ENUO 阅读(1606) 评论(0) 推荐(1) 编辑
摘要: 今天我们来谈谈线程池:应用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态。为了简化对这些线程的管理,.NET框架为每个进程提供了一个线程池,一个线程池有若干个等待操作状态,当一个等待操作完成时,线程池中的辅助线程会执行回调函数。线程池中的线程由系统管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。通过基础类库中的ThreadPool类提供一个线程池,该线程池可用于发送工作现,处理异步I/O,代表其他线程等待及处理计时器.ThreadPool类的所有方法都是静态方法.T 阅读全文
posted @ 2011-12-07 22:49 ENUO 阅读(2233) 评论(6) 推荐(3) 编辑
摘要: 首先我们来看看线程的状态线程状态表1-1 ThreadState定义的枚举常数成员名称说 明Aborted线程处于Stopped状态中AbortRequested已对线程调用了Thread.Abort方法,但线程尚未收到试图终止它的挂起的System.Threading. ThreadAbortExceptionBackground线程正作为后台线程执行(相对于前台线程而言)。此状态可以通过设置Thread.IsBackground属性来控制Running线程已启动,它未被阻塞,并且没有挂起的ThreadAbortExceptionStopped线程已停止StopRequested正在请求线程 阅读全文
posted @ 2011-12-07 12:07 ENUO 阅读(1028) 评论(0) 推荐(1) 编辑
摘要: C#线程从陌生到熟悉(1) 谈到线程(Thread),大家应该不会陌生。和他相近的还有一个进程的概念(Process)。那首先我们先来熟悉他们的概念,以及他们之间的关系。什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。他们的关系?线程根进程既有联系又有区别。进程是代码在数据集的一次执行,是系统资源分配的基本单位。任何一个线程必然在一个进程中运行;而一个进程至少拥有一个 阅读全文
posted @ 2011-12-06 14:47 ENUO 阅读(2740) 评论(8) 推荐(7) 编辑
摘要: Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式 x => x * x 读作“x goes to x times x”。可以将此表达式分配给委托类型,如下所示: delegate int del(int i,int j); static void Main(string[] args) { del myAdd=... 阅读全文
posted @ 2011-10-08 16:52 ENUO 阅读(1431) 评论(3) 推荐(1) 编辑