Parallism
文章平均质量分 60
wangchongcy
IGT软件开发工程师
展开
-
C#使用delegate异步执行方法
在另外一个线程执行一个函数有很多种方法,这里讨论的是使用delegate的BeginInvoke方法,它的好处是在另一个线程中调用了函数,而且不用花费太多的开销。下面是使用delegate异步执行方法的示例: class Program { static void Main(string[] args) { object syncObject = ne原创 2012-01-30 14:52:56 · 5890 阅读 · 0 评论 -
线程控制——创建、启动及终止
1、创建线程Thread thread = new Thread(new ThreadStart(SortAscending));2、启动线程thread.Start();3、终止线程如果想要一个进程结束,一种方法是让线程的入口函数执行完毕,但是在很多情况你下这种方式并不足以满足应用程序的需求。1)Abort当Abort方法被调用,它会向要终止的线程触发原创 2012-01-31 14:13:43 · 818 阅读 · 0 评论 -
线程控制——更多线程控制方法
1、Sleep和InterruptSleep函数阻塞当前线程一定的时间。当时间到达后,操作系统在下一个时间片按照其调度算法继续调度执行。Interrupt函数唤醒处于WaitSleepJoin状态的线程。本质上,Interrupt函数向处于WaitSleepJoin状态的线程触发ThreadInterryptedException,如果该异常没有被处理则会继续向上抛出,如图:原创 2012-01-31 14:42:54 · 817 阅读 · 0 评论 -
线程状态及其转换
线程对象使用ThreadState.属性指示线程状态。ThreadState是带flag特性的枚举类型对象,因此判断线程当前的状态必须用bitmask,作为一个特例,由于Running状态的bit码是0,因此,需要用如下方式判断线程是否处于运行状态:(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) ==原创 2012-01-30 17:13:50 · 2570 阅读 · 0 评论 -
WaitHandle——解决线程同步问题
WaitHandle及其子类提供了线程同步问题的解决方案,WaitHandle的类图如下:ManualResetEvent和AutoResetEvent都是在Signaled和Unsignaled两种状态之间切换,所不同的是当autoresetevent的waitone函数被调用后,其状态自动变为unsignaled。Mutex可以用来组成临界代码区,它的特点是可以跨进程。原创 2012-02-02 08:30:46 · 952 阅读 · 0 评论 -
线程间通信——数据传递和同步
线程间通信会产生两个问题:一个是如何传递数据,另一个是如何同步。1、线程间数据传递线程被创建后,我们无法利用线程的控制函数将数据从一个线程传递到另一个线程,然而,.NET本身的一个重要特性就是完全面向对象,即所有的函数都是放在类之中,因此,如果我们改变类成员变量的值,这种改变将会被附着在类函数上的线程看到。线程间通过资源(包括类成员变量)传递数据例如:下面的例子使用原创 2012-02-01 10:33:54 · 5614 阅读 · 1 评论 -
一致性控制——解决线程间数据传递问题
线程间数据传递会产生两个问题:1)竞争两个线程同时修改一个变量,后一个人的修改会覆盖前一个人的修改,这种情况叫做竞争。2)死锁当一个线程占用资源A而请求资源B,另一个线程占用资源B而请求资源A,两个线程都无法继续运行,这种情况叫做死锁。下面的方法用来解决线程间数据传递的问题(主要是竞争带来的问题,死锁主要依赖于编程技巧而不是编程技术来解决问题)。1、原子操作原创 2012-02-01 14:34:23 · 2068 阅读 · 0 评论