15,471
社区成员
发帖
与我相关
我的任务
分享
DWORD WINAPI Thread(LPVOID lpParameter)
{
for (int i = NULL; i < 10; i++)
{
Sleep(2000);
EnterCriticalSection(&cs);
printf("一号线程 : %d %x %x \n", cs.LockCount, cs.RecursionCount, cs.OwningThread);
LeaveCriticalSection(&cs);
}
return NULL;
}
DWORD WINAPI Thread_1(LPVOID lpParameter)
{
for (int i = NULL; i < 10; i++)
{
Sleep(2000);
EnterCriticalSection(&cs);
printf("二号线程 : %d %x %x \n", cs.LockCount, cs.RecursionCount, cs.OwningThread);
LeaveCriticalSection(&cs);
}
return NULL;
}
DWORD WINAPI Thread_2(LPVOID lpParameter)
{
//
for (int i = NULL; i < 10; i++)
{
Sleep(2000);
EnterCriticalSection(&cs);
printf("三号线程 : %d %x %x \n", cs.LockCount, cs.RecursionCount, cs.OwningThread);
LeaveCriticalSection(&cs);
}
return NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
//初始化
InitializeCriticalSection(&cs);
//InitializeCriticalSection(&_cs);
printf(" : %x %x %x \n", cs.LockCount, cs.RecursionCount, cs.OwningThread);
//启动线程
HANDLE haHWND = CreateThread(NULL, NULL, Thread, NULL, NULL, NULL);
HANDLE haHWND_1 = CreateThread(NULL, NULL, Thread_1, NULL, NULL, NULL);
HANDLE haHWND_2 = CreateThread(NULL, NULL, Thread_2, NULL, NULL, NULL);
Sleep(1000 * 60 * 60);
return 0;
}
CRITICAL_SECTION cs;
InitializeCriticalSection(&cs);
EnterCriticalSection(&cs);
LeaveCriticalSection(&cs);
InitializeCriticalSection 后 LockCount(-1); RecursionCount (0); OwningThread(0)
EnterCriticalSection 后 LockCount(0); RecursionCount (1); OwningThread(xxx);
LeaveCriticalSection 后 LockCount(-1); RecursionCount (0); OwningThread(0)
LockCount为负值 也就是没有锁, 0 有锁