- C/C++ code
#include <windows.h>#include <stdio.h>CRITICAL_SECTION cs1;CRITICAL_SECTION cs2;DWORD WINAPI threadProc(PVOID pvParam){ EnterCriticalSection(&cs1); printf("1\n"); LeaveCriticalSection(&cs1);}DWORD WINAPI threadProc2(PVOID pvParam){ EnterCriticalSection(&cs2); printf("2\n"); LeaveCriticalSection(&cs1);}int main(){ DWORD dwId; HANDLE hThread[2]; InitializeCriticalSection(&cs1); InitializeCriticalSection(&cs2); hThread[0]=CreateThread(NULL, 0, threadProc, NULL, 0, &dwId); hThread[1]=CreateThread(NULL, 0, threadProc2, NULL, 0, &dwId); WaitForMultipleObjects(2,hThread,FALSE,INFINITE); EnterCriticalSection(&cs1); printf("Main Thread---SendMessage\n"); LeaveCriticalSection(&cs1); CloseHandle(hThread[0]); CloseHandle(hThread[1]); DeleteCriticalSection(&cs1); DeleteCriticalSection(&cs2); return 0;}
上边的代码。有时候会出现死锁。有时候又可以显示正常但是没有同步成功。比较郁闷。不知道是什么情况。有没有高人肯指点一下。
------解决方案--------------------------------------------------------
DWORD WINAPI threadProc2(PVOID pvParam)
{
EnterCriticalSection(&cs2);
printf("2\n");
LeaveCriticalSection(&cs1);-----纳尼?
}