互斥量和临界区的问题?怎么出现这种情况?
//互斥量 为什么这的线程访问都是执行一次就切换了。
CRITICAL_SECTION gcs1;
CRITICAL_SECTION gcs2;
CRITICAL_SECTION gcs3;
DWORD WINAPI ThreadProc1 (LPVOID lp)
{
while (TRUE)
{
EnterCriticalSection(&gcs1);//下面对应改
cout<<"thread 1 .............."<<endl;
Sleep(100);
LeaveCriticalSection(&gcs1);
}
return 1;
}
.....
int main(void)
{
InitializeCriticalSection(&gcs1);
InitializeCriticalSection(&gcs2);
InitializeCriticalSection(&gcs3);
.......
#include <Windows.h>
#include <iostream>
using namespace std;
#define MAX_NUM 3
HANDLE gHmutex;
int tswitch=0;
DWORD WINAPI ThreadProc1 (LPVOID lp)
{
while (TRUE)
{
WaitForSingleObject(gHmutex,INFINITE);
if((tswitch % 3)==0)
{
cout << "thread 1 .............." << endl;
tswitch ++;
}
ReleaseMutex(gHmutex);
Sleep(100);// or Sleep(0)
}
return 1;
}
DWORD WINAPI ThreadProc2 (LPVOID lp)
{
while (TRUE)
{
WaitForSingleObject(gHmutex,INFINITE);
if((tswitch % 3)==1)
{
cout << "thread 2 .............." << endl;
tswitch ++;
}
ReleaseMutex(gHmutex);
Sleep(100);
}
return 2;
}
DWORD WINAPI ThreadProc3 (LPVOID lp)
{
while (TRUE)
{
WaitForSingleObject(gHmutex,INFINITE);
if((tswitch % 3)==2)
{
cout << "thread 3 .............." << endl << endl;
tswitch ++;
}
ReleaseMutex(gHmutex);
Sleep(100);
}
return 3;
}
int main(void)
{
DWORD dwID[MAX_NUM];
gHmutex=CreateMutex(NULL,FALSE,NULL);
CreateThread(NULL,0,ThreadProc1,(LPVOID)0,0,&dwID[0]);
CreateThread(NULL,0,ThreadProc2,(LPVOID)0,0,&dwID[1]);
CreateThread(NULL,0,ThreadProc3,(LPVOID)0,0,&dwID[2]);
Sleep(1000*15);
return 0;
};