不要说请教,我也只是将我的理解说一下,不对之处请大家多多指教[
]
由于在delphi中没有提供互斥对象,所以必须使用API来自己建立并维护。在建立互斥对象时,
可以指定一个唯一的名称(命名互斥对象)或者不指定名称(无名互斥对象),在不同的进程程中
要共享(不同进程间实现互斥)应该使用命名互斥对象。命名互斥对象的名称应该是全局唯一的,
不能和事件对象与临界区对象相同,否则将建立失败。 一个线程中可以使用CreateMutex函数来建
立互斥对象,并且在建立时可以立即申请拥有该对象,实现对资源的独占访问。在其它进程中的线
程要想拥有该互斥对象,可以调用openmutex函数来返回其句柄,该函数只有在其它进程已经建立
互斥对象后才能成功返回互斥对象的句柄。
对一个互斥资源建立互斥对象后,线程就可以使用等待函数来请求访问该资源。当等待函数所
要求的互斥对象没有信号时,它就将线程阻塞(线程在阻塞状态下只占用极少的系统资源),直到
信号可用或者超时返回。等待函数分为三类,每一类中又有不同的几个函数,详细说明可以看
win32 sdk的帮助。
线程在处理完成自己的工作后,就当调用releasemutex函数来释放互斥对象以允许其它进程使用,
如果一个线程在终止前没有释放它所拥有的互斥对象,那么系统就认为这个互斥对象被抛弃,其它等
待的线程将获得其拥有权,但等待函数的返回值会标识出来此互斥对象被抛弃。此时有两种处理,一
种是假设进程出现错误,被保护的共享资源处于不可知的状态;另一种就是进行正常的操作,认为互
斥对象没有被抛弃,这时当线程释放掉对互斥对象的拥有权后互斥对象的错误状态被清除。