随笔分类 -  多线程

主线程捕捉子线程的异常
摘要:首先需要了解异常的实现机制:异常的实现机制是严重依赖与线程的栈的。每个线程都有一个栈,线程启动后会在栈上安装一些异常处理帧,并形成一个链表的结构,在异常发生时通过该链表可以进行栈回滚,如果你自己没有安装的话,可能会直接跳到链表尾部,那可能是CRT提供的一个默认处理帧,弹出一个对话框提示某某地址内存... 阅读全文

posted @ 2014-10-17 10:35 象山 阅读(1043) 评论(0) 推荐(0)

使用AutoResetEvent,ManualResetEvent和ManualResetEventSlim类进行线程间通信
摘要:AutoResetEvent和ManualResetEvent允许线程通过发信号进行通信。两者都有两个信号量:True和False。都通过Set()和ReSet()来设置。并且使用WaitOne()的方法阻止当前的线程。不同的是AutoResetEvent在调用Set()把信号量释放后(信号量设置为... 阅读全文

posted @ 2014-03-04 00:24 象山 阅读(2183) 评论(0) 推荐(0)

多线程之异步编程模式
摘要:.Net为执行异步操作提供了三中模式:异步编程模型 (APM)基于事件的异步模式(EAP)基于任务的异步模式(TAP)1.异步编程模型(APM)。使用IAsyncResult设计模式的异步操作通过Begin操作和End操作两个方法实现。在调用Begin操作后,调用线程继续执行指令,同时异步操作在另外一个线程上执行,调用线程调用End方法来获取结果。Code: 1 namespace Examples 2 { 3 public class Progrom 4 { 5 public static void Main() 6 { 7 ... 阅读全文

posted @ 2014-01-13 23:39 象山 阅读(955) 评论(0) 推荐(1)

多线程之共享资源
摘要:1.lock Lock锁定一段代码 lock确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。 通常,应避免锁定public类型,否则实例将超出代码的控制范围。常见的结构lock(this)、lock(typeof(MyType))和lock("myLock")违反此准则:如果实例可以被公共访问,将出现lock(this)问题。如果MyType可以被公共访问,将出现lock(typeof(MyType))问题。由于进程中使用同一字符串的任何其他代码将共享同一个锁,所以出现lock(“myL 阅读全文

posted @ 2014-01-06 23:05 象山 阅读(746) 评论(0) 推荐(0)

线程池ThreadPool
摘要:许多应用程序创建的线程都要在休眠状态中消耗大量时间,以等待事件发生。其他线程可能进入休眠状态,只被定期唤醒以轮询更改或更新状态信息。线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程。一个线程监视排到线程池的若干个等待操作的状态。当一个等待操作完成时,线程池中的一个辅助线程就会执行对应的回调函数。 托管线程池中的线程为后台线程,即它们的 IsBackground 属性为 true。这意味着在所有的前台线程都已退出后,ThreadPool 线程不会让应用程序保持运行。 每个进程都有一个线程池。线程池的默认大小为每个可用处理器有 25 个线程。使用 SetMaxThr.. 阅读全文

posted @ 2014-01-02 17:21 象山 阅读(376) 评论(0) 推荐(0)

导航