随笔分类 -  多线程

多线程之旅:避免死锁——简单的锁分级(锁排序)
摘要:死锁是很讨厌的(虽然活锁更讨厌),如何避免死锁呢? 在两个线程间的循环等待是比较容易识别的,但是在死锁的形成中如果包含多个线程,那么就是难以发现的(现实中不少这种情况)。 首先来看看死锁形成的几个必要条件 1、互斥 2、等待 3、不可抢占 4、循环等待 除了完全避免多线程编程之外,如果要避免死锁,那么必须要使得上面这4个条件中有任意一个不满足。 阅读全文
posted @ 2013-05-26 20:14 一路转圈的雪人 阅读(5826) 评论(0) 推荐(1) 编辑
多线程之旅七——GUI线程模型,消息的投递(post)与处理
摘要:基于消息的GUI构架 在过去的日子中,大部分编程语言平台的GUI构架几乎没有发生变化。虽然在细节上存在一些差异,比如在功能和编程风格上,但大部分都是采用了相同的构架来响应用户输入以及重新绘制屏幕。这种构架可以被总结为“单线程且基于消息”。 阅读全文
posted @ 2012-11-17 20:47 一路转圈的雪人 阅读(5573) 评论(1) 推荐(1) 编辑
多线程之旅——内存一致性(未完成)
摘要:在我们的默认思维中,程序就和我们书写的方式从上到下执行。包括编译器帮我们编译后的代码也是如此。这种严格依赖前后执行顺序的操作,在多线程环境下有时候会引起难以想象的bug。设计存储操作的时候,有时候你无法想象到这些操作其实并不是原子操作。 阅读全文
posted @ 2012-11-13 09:52 一路转圈的雪人 阅读(312) 评论(0) 推荐(0) 编辑
多线程之旅六——异步编程模式,自己实现IAsyncResult
摘要:作为模式,只是一种大家认可的经验,模式可以作为大家交流的词汇而存在。下面我们就要介绍几种异步编程模式,AMP、EAP和TAP。当然,法无定法,在我们理解的基础上,我们可以根据具体情况适度修改。下面介绍的只是在通常情况下的两种模式会是以什么样子的形式出现。 一 模型简介 1.APM 异步编程模型 这种模式的特征是一些成对出现的方法,分别以Begin和End作为前缀。 阅读全文
posted @ 2012-11-03 21:32 一路转圈的雪人 阅读(10751) 评论(5) 推荐(3) 编辑
多线程之旅之四——浅谈内存模型和用户态同步机制
摘要:用户态下有两种同步结构的 volatile construct: 在简单数据类型上原子性的读或者写操作 interlocked construct:在简单数据类型上原子性的读和写操作 (在这里还是要再啰嗦一句,记住只有操作系统才有办法阻止一个线程执行,通过无论是I/O中断还是线程阻塞等方式。) 阅读全文
posted @ 2012-06-26 22:48 一路转圈的雪人 阅读(2846) 评论(3) 推荐(1) 编辑
多线程之旅之三——Windows内核对象同步机制
摘要:内核对象(kernel object): windows操作系统提供的最近本同步机制,这些对象是构建并发程序和基本并发数据结构的基础。事实上,无论在代码中是否直接使用了这些对象,在软件的某个层次中都肯定会依赖它们。 阅读全文
posted @ 2012-04-24 10:42 一路转圈的雪人 阅读(5660) 评论(1) 推荐(6) 编辑
多线程之旅二——线程与进程简介
摘要:进程:分配系统资源的一种数据结构。简而言之,就像一个储物箱一样,特点是为了保证安全,一个进程中的指针被设计为不可访问其他进程的地址。就像你的钥匙正常情况下不能随便打开任何一个人的储物箱一样,你只能打开自己的储物箱。如果打开别人的储物箱,不是无意的编码疏忽,就是恶意的攻击其他程序。线程:分配CPU运行周期的一种数据结构。线程其实是任务的抽象概念。创建一个线程,相当于告诉CPU我有一个新任务需要你分配时间来处理。多线程和一个线程执行多个任务的区别就在于创建多个线程就是要求cpu要同时处理一些事情,而不是有先后顺序。在unix下其实就没有线程这种概念,就只有任务的概念。一个任务就相当于只有一个线程的 阅读全文
posted @ 2012-02-05 19:53 一路转圈的雪人 阅读(1278) 评论(0) 推荐(1) 编辑
多线程之旅——从概念开始
摘要:程序执行顺序是按照串行执行的假设: 比如我们读诗词,默认从上到下 1.床 前 明 月 光, 2.疑 是 地 上 霜。 3.举 头 望 明 月, 4.低 头 思 故 乡。 阅读全文
posted @ 2012-02-05 19:45 一路转圈的雪人 阅读(3436) 评论(3) 推荐(4) 编辑

点击右上角即可分享
微信分享提示