C++ USES CriticalSection to implement a thread synchronization instance

  • 2020-04-02 02:48:00
  • OfStack

This article illustrates the method of thread synchronization using CriticalSection in C++. Four lines of code are added to the above (link: #) and four functions are used:
EnterCriticalSection ::DeleteCriticalSection ::EnterCriticalSection ::LeaveCriticalSection at this point, the printed Numbers are equal.

The specific code is as follows:


#include "stdafx.h" 
#include <Windows.h> 
 
DWORD g_cnt1; 
DWORD g_cnt2; 
BOOL g_bContinue = TRUE; 
CRITICAL_SECTION cs; 
 
DWORD WINAPI ThreadProc(__in LPVOID lpParameter) 
{ 
  ::EnterCriticalSection(&cs); 
  while(g_bContinue) 
  { 
    g_cnt1++; 
    g_cnt2++; 
  } 
  ::LeaveCriticalSection(&cs); 
  return 0; 
} 
 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
  HANDLE hThread[2]; 
  g_cnt1 = g_cnt2 = 0; 
  ::InitializeCriticalSection(&cs); 
 
  hThread[0] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); 
  hThread[1] = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL); 
 
  Sleep(1000); 
  g_bContinue = FALSE; 
  ::WaitForMultipleObjects(2, hThread, TRUE, INFINITE); 
  printf("g_cnt1=%dn",g_cnt1); 
  printf("g_cnt2=%dn",g_cnt2); 
 
  ::DeleteCriticalSection(&cs); 
 
  ::CloseHandle(hThread[0]); 
  ::CloseHandle(hThread[1]); 
  return 0; 
}

Hope that the article described in the C++ programming to help you.


Related articles: