随笔分类 - 线程
摘要:http://www.cnblogs.com/zhili/archive/2013/05/15/Csharp5asyncandawait.html
阅读全文
摘要:前段时间仔细看过些关于多线程方面的资料,项目中用到线程的地方也不少,可是,当看了Jeffrey的一篇关于锁的文章后,发现自己虽然一直都在使用多线程,但是缺少了做多线程编程需要的思维!所以想从Jeffrey的Optex(锁)入手,来谈谈我从其中体会的东西。 在NET中,我们用的最多的锁机制就是lock,用起来很简单,短短几行程序就可以实现,例如: Lock 's Code Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->publiccl
阅读全文
摘要:一、使用BeginInvoke和EndInvoke进行异步调用的四种常用方法,每种方法都是通过BeginInvoke方法来启动异步方法,调用EndInvoke方法来完成异步调用。using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace ConsoleApplication1{ public delegate void AsynComputeCaller(int num, out int result); class Factorial { publi
阅读全文
摘要:WaitHandle是一个用以控制线程同步的类,有WaitOne()方法,用以阻止当前线程(提前是其状态为Nonsignaled,即红灯,后面解释),直到当前的WaitHandle收到绿灯信号。WaitHandle有两个状态"Signaled" and "Nonsignaled",前者可以理解为绿灯,绿灯状态时WaitOne方法无效,当前线程不会被阻止,后者可以理解为红灯,WaitOne()方法会阻止当前线程。这两个状态是通过函数Set()和Reset()来设置的。前者设为绿灯,后者设为红灯。(1):一般来说,初始状态都是"Nonsignale
阅读全文
摘要:IntroductionIt is normal practice to open the Windows command prompt and execute commands. The command when executed shows the result onto the screen. There are many commands that we execute daily such as dir, find, etc. A situation may arise when you want to execute a (shell) command from the C# ap
阅读全文
摘要:前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。在C#中,关键字lock定义如下:lock(expression) statement_blockexpression代表你希望跟踪的对象,通常是对象引用。如果你想保护一个类的实例,一般地,你可以使用this;如果你想保护一个静态变量(如互斥
阅读全文
摘要:如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类。我们可以把Mutex看作一个出租车,乘客看作线程。乘客首先等车,然后上车,最后下车。当一个乘客在车上时,其他乘客就只有等他下车以后才可以上 车。而线程与Mutex对象的关系也正是如此,线程使用Mutex.WaitOne()方法等待Mutex对象被释放,如果它等待的Mutex对象被释放 了,它就自动拥有这个对象,直到它调用Mutex.ReleaseMutex()方法释放这个对象,而在此期间,其他想要获取这个Mutex对象的线程都 只有等待。下面这个例子使用了
阅读全文
摘要:Timer类:设置一个定时器,定时执行用户指定的函数。定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。初始化一个Timer对象:Timer timer = new Timer(timerDelegate, s,1000, 1000);// 第一个参数:指定了TimerCallback 委托,表示要执行的方法;// 第二个参数:一个包含回调方法要使用的信息的对象,或者为空引用;// 第三个参数:延迟时间——计时开始的时刻距现在的时间,单位是毫秒,指定为“0”表示立即启动计时器;// 第四个参数:定时器的时间间隔——计时开始以后,每隔这么长的一段时间,TimerCallback所代表
阅读全文
摘要:在多线程的程序中,经常会出现两种情况:一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应这一般使用ThreadPool(线程池)来解决;另一种情况:线程平时都处于休眠状态,只是周期性地被唤醒这一般使用Timer(定时器)来解决;ThreadPool类提供一个由系统维护的线程池(可以看作一个线程的容器),该容器需要 Windows 2000 以上系统支持,因为其中某些方法调用了只有高版本的Windows才有的API函数。将线程安放在线程池里,需使用ThreadPool.QueueUserWorkItem()方法,该方法的原型如下://将一个线程放进线程池
阅读全文
摘要:NET中各种线程同步方法在NET多线程开发中,有时候需要多个线程协调工作,完成这个步骤的过程称为“同步”。使用同步的主要原因:1.多个线程访问同一个共享资源。2.多线程写入文件时保证只有一个线程使用文件资源。 3.由事件引发线程,线程等待事件,需要挂起线程。NET中线程同步常见的几种方法:1.locklock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。lock的优点:简单易用,对象的同步几乎透明,轻量级。使用lock需要注意:锁定的对于应该是私有的,如果是公有的对象,可能出现超出控制范围的其它代码锁定
阅读全文
浙公网安备 33010602011771号