多线程-5
2020-11-26 12:23
标签:style blog class code tar ext color get strong int 2014 创建互斥对象的函数: HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // SD BOOL bInitialOwner, // initial owner LPCTSTR lpName // object name ); lpMutexAttributes:NULL,默认安全性 bInitialOwner:指互斥对象初始拥有者。如果这个值为真,那么调用者创建互斥对象,调用的线程获得互斥对象的所有权,否则不获得所有权。 lpName:给互斥对象取个名字 互斥对象说与内核对象,它能够确保线程拥有单个资源的互斥访问权。 互斥对象包含一个使用数量,一个线程ID和一个计数器。 ID用于标识系统中的哪个线程当前拥有互斥对象,计数器用于指明该线程拥有互斥对象的次数。 根据互斥对象是否已经请求到了,等待: WaitForSingleObject The WaitForSingleObject functionreturns when one of the following occurs: To enter an alertable wait state, use the
WaitForSingleObjectExfunction. To wait for multiple objects, use theWaitForMultipleObjects. DWORD WaitForSingleObject( HANDLE hHandle, // handleto object DWORD dwMilliseconds // time-out interval ); hHandle:互斥对象的句柄,互斥对象变为有信号状态,函数返回。若始终没有处于有信号状态,函数就会一直等待。等待就会导致线程暂时运行。 dwMilliseconds:指超时的时间间隔。0,立即返回,INFINITE,永远等待,除非有信号 释放互斥对象--谁拥有互斥对象,谁释放。本例中main函数创建,只能在main函数中释放 ReleaseMutex This function releases ownership of thespecified mutex object. BOOL ReleaseMutex( HANDLE hMutex); 返回非零表示成功 多线程-5,搜素材,soscw.com 多线程-5 标签:style blog class code tar ext color get strong int 2014 原文地址:http://blog.csdn.net/yanzongshuai/article/details/24742549#include
#include
//当关闭句柄的时候,会递减新线程的线程内核对象的使用计数,
//线程执行完毕后,也会递减使用计数
//当使用计数为0时,系统会释放线程内核对象
CloseHandle(hThread2);
hMutex=CreateMutex(NULL,FALSE,NULL);//创建一个匿名的互斥对象.False 没有线程拥有该互斥对象,
//操作系统会将该互斥对象设为已通知状态,即有信号状态
Sleep(4000);//主线程放弃执行权力,进入等待状态
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while(TRUE)
{
WaitForSingleObject(hMutex,INFINITE);//第一个线程运行,hMutex处于有信号状态,线程请求到了互斥对象
//OS将互斥对象的ID设为该线程的ID。得到这个互斥对象后
//OS会将该互斥对象设为未通知状态
if(tickets>0)
{
Sleep(1);
cout0)
{
cout
上一篇:手把手教你清除WIN7的C盘垃圾