Windows多线程中的互斥对象

来源:互联网 发布:国外博士论文数据库 编辑:程序博客网 时间:2024/05/16 09:00

互斥对象,顾名思义,就是有互相排斥的意思,拥有它的线程是排斥其他线程的,拥有它的进程也是排斥其他进程的。

HANDLE  CreateMutex( LPSECURITY_ATTRIBUTES      lpMutexAttributes,BOOL    bInitialOwner,LPCTSTR    lpName),创建或者打开一个命名或匿名的互斥对象,第一个参数使用空值,使用默认的安全性;第二个参数指定互斥对象的拥有者,为真,则创建这个互斥对象的线程对它具有所有权,反之,则没有拥有者;第三个参数指定互斥对象的名称,也可以为空。

DWORD  WaitForSingleObject(HANDLE     hHandle,  DWORD   dwMilliseconds   );  线程主动请求共享对象的使用权,第一个参数代表所申请对象的句柄,第二个参数表示等待的时间,以毫秒为单位,如果为0,就会立即返回;如果为INFINITE,就会一直等待下去,直到等待的对象有信号状态为止。

BOOL   ReleaseMutex(  HANDLE   hMutex );线程利用它释放指定对象的所有权,。谁拥有谁释放。不同的线程之间不能嵌套成对使用WaitForSingleObject和ReleaseMutex,互斥对象有计数器在记录其被线程的使用记录;如果一个线程在推出之后没有释放它所占用的对象,操作系统会检测到情况,并将其对象释放,为有信号,以供其他线程请求。