一般为了保证资源的独占,会使用互斥(Mutex),临界区,或信号量的方法。这里使用的是互斥,在两个线程中创建同名互斥,并通过输出信息观察两个线程的切换执行情况。
1、创建两个线程
// TODO: Add extra initialization here
HANDLE hThread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Thread1,this,0,NULL);
HANDLE hThread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Thread2,this,0,NULL);
2、在线程中创建同名互斥
DWORD CTestMutexDlg::Thread1(LPVOID lparam)
{
CTestMutexDlg *pDlg;
pDlg=(CTestMutexDlg*)lparam;
HANDLE hMutex = NULL;
hMutex = CreateMutex(NULL,FALSE,_T("Test"));
while(1)
{
WaitForSingleObject(hMutex,500);
TRACE(_T("1\n"));
ReleaseMutex(hMutex);
}
return 1;
}
DWORD CTestMutexDlg::Thread2(LPVOID lparam)
{
CTestMutexDlg *pDlg;
pDlg=(CTestMutexDlg*)lparam;
HANDLE hMutex = NULL;
hMutex = CreateMutex(NULL,FALSE,_T("Test"));
while(1)
{
WaitForSingleObject(hMutex,500);
TRACE(_T("2\n"));
ReleaseMutex(hMutex);
}
return 1;
}
执行后会发现两个线程会交替执行。