进程和线程的同步




线程和进程同步的4个对象: Critical Section, Mutex和Semaphore, 还有Event.
Critical Section是最简单的,只要将Critical Section的lock和unlock语句夹住你要保护的资源访问过程即可. Critical Section 会自动记录访问者的线程.帮助你完成互斥的效果.它最简单,也最高效,但是不能用在进程之间.
其他三种都可以用在进程之间,他们都有name,可以用name在进程间获得handle.他们都要与WaitForSingleObject or WaitForMultiObject配合使用.

Mutex用法,在要保护的资源访问之前调用WaitforSingleObject,访问结束的时候release. Wait函数会判断该Mutex对象是否被占用(或者说无信号状态),有信号的话,立即返回,无信号则会阻塞.知道mutex编程有信号状态.

Semaphore和Mutex机会一样,唯一的不同是,Semaphore可以控制访问一个资源的最大数量,Mutex相当于最大数量是1的semaphore.

Event其实道理也是一样,但是Event多用在一个线程通知另一个线程某个信号.它允许setevent和resetevent来自由控制有信号和无信号状态.告知另外一个线程.另一个线程一般通过waitforsingleboject函数来等待信号. 另外自动的event在调用wait函数之后自动变成无信号状态.这是它的特色.




原文地址:https://www.cnblogs.com/dqshll/p/1117498.html