书上说“如果拥有某mutex之线程结束了,该mutex会被自动清除的唯一情况是:此线程是最后一个与该mutex handle有关联的线程.否则此核心对象的引用计数仍然是比0大:其他线程(以及进程)仍然可以拥有此mutex的合法handle.然而.当线程结束而没有释放某个mutex时,有一种特殊的处理方式.”以及“在各种同步机制中是独一无二的.如果线程拥有一个mutex而在结束前没有调用ReleascMutex(), mutex不会被摧毁.取而代之的是,该mutex会被视为“未被拥有”以及“未被激发”.而下一个等待中的线程会被以WAIT_ABANDONED_0通知.不论线程是因为ExitThread()而结束,或是因当掉而结束,这种情况都存在。”
请问是什么意思
代码:
#include <iostream>
using namespace std;
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
HANDLE hMutex;
DWORD WINAPI ThreadFun(LPVOID);
#define Thread_Num 3
int main()
{
int id;
HANDLE handle[Thread_Num];
hMutex=CreateMutex(NULL,FALSE,NULL);
for(int i=0;i<Thread_Num;i++)
{
handle[i]=CreateThread(NULL,0,ThreadFun,(LPVOID)i,0,(LPDWORD)&id);
if(handle[i])
{
cout<<"线程"<<id<<"被创建"<<endl;
}
}
WaitForMultipleObjects(Thread_Num,handle,TRUE,INFINITE);
system("pause");
return EXIT_SUCCESS;
}
DWORD WINAPI ThreadFun(LPVOID lp)
{
DWORD result=
WaitForSingleObject(hMutex,INFINITE);
cout<<(int)lp<<endl;
WaitForSingleObject(hMutex,INFINITE);
return 0;
}
偶然的你
相关分类