#include #include using namespace std; CRITICAL_SECTION g_cs; DWORD WINAPI Thread1(void *param) { int th = * ((int *) param); for (int i=0; i<10; i++) { EnterCriticalSection(&g_cs); cout << th << '-' ; LeaveCriticalSection(&g_cs); Sleep(rand() % 10); } return th; } void main() { InitializeCriticalSection(&g_cs); DWORD dwMainThreadId = GetCurrentThreadId(); cout << "Main Thread ID: " << dwMainThreadId << endl; HANDLE hThread[5]; DWORD dwThreadId; int b; for (int i=0; i<5; i++) { hThread[i] = CreateThread( (SECURITY_ATTRIBUTES *) 0, 0, & Thread1, (void *) &i, CREATE_SUSPENDED, &dwThreadId); cout << "New Thread ID: " << dwThreadId << endl; } for (i=0; i<5; i++) { b = ResumeThread(hThread[i]); } DWORD dwExitCode; DWORD dwStatus = WaitForMultipleObjects(5,hThread, true, INFINITE); cout << endl; for (i=0; i<5; i++) { b = GetExitCodeThread(hThread[i], &dwExitCode); cout << "Thread ["<