C++多线程安全简单的问题
HANDLE hMutex;
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread1;
HANDLE hThread2;
//创建互斥对象
hMutex=CreateMutex(NULL,TRUE,"Tickets");
WaitForSingleObject(hMutex,INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex); -----------------------问题1:此处为什么连用了两个呢,删掉一个的话运行不出结果了
//创建线程
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
Sleep(4000);
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(hMutex); ------------------问题2:是这样关闭互斥对象吧?而且是在这个位置关闭还是放在前面?
return 0;
}
[解决办法]
只能给你解答后面那个,close函数只会使该内核对象计数减一,如果内核对象(在这里就是互斥量内核对象)计数为0,那么系统会释放该对象。在该进程句柄表内的互斥量索引将会失效。
最后说一点:所有资源共享控制中 互斥量效率是最低的,因为它需要在用户模式和内核模式来回切换,大量消耗CPU周期。你可以用关键段或者读写锁。