参考:http://blog.youkuaiyun.com/morewindows/article/details/7392749
参考:http://blog.youkuaiyun.com/betabin/article/details/7533634
因为记性不好,总是忘记。记在本子上,一会就忘记记在那个地方了。所以转战blog.
多线程
多线程编程主要是为了程序的并发执行。理解多线程编程主要理解两个概念:同步和互斥。
同步:同步就是线程等待某个条件成熟再执行。比如A线程等待B线程执行完了才能执行。
注:网上的解释:线程协作(直接相互制约),
一个线程必须等另一线程完成某个操作后才能继续。
互斥:互斥表示获得某个资源后排斥别的线程修改它。
注:网上的解释:资源共享(间接相互制约),同一时刻仅有一个线程使用资源,
是一种特殊的同步。
常用的线程同步互斥机制:
关键段:
只能用于互斥。
因为线程成功等待之后把所有权交给了线程,拥有所有权之后线程就肆无忌惮了,直到线程释放它。
如: 儿子在等爸爸的苹果,关键段和互斥量等的是苹果本身,完了之后拥有了苹果,释放时把苹果(吃剩的也要放回去)放回去了;而事件和信号量等的是苹果放在盘子里的事件,等到了就拿走吃掉然后触发盘子空的事件让爸爸再放苹果。
互斥量:Mutex
只能用于互斥。互斥量能很好的处理“遗弃”情况,因此在多进程之间可以放心的使用。
事件:Event
可用于同步。但是只能触发一个盘子的事件,如果爸爸放水果在两个盘子里,就不适用了。
信号量:Semaphore
可用于同步。可以触发多个相同盘子的事件,如果爸爸放水果在两个盘子里,会触发两次等待。因为它有计数,如果计数大于一,就会触发等待。
函数说明:详见第一个参考网址。