CRITICAL_SECTION 学习
// Critsetion.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> #include <iostream> #include <process.h> using namespace std; CRITICAL_SECTION g_cs; char name[]="zhangdongsheng"; unsigned __stdcall ThreadPoc1( void* pArguments) { while (1) { EnterCriticalSection(&g_cs); //如果此处不对全局变量name进行加锁 //那么输出结果将有可能出现不一致现象 memset(name,0,sizeof(name)); strcpy(name,"Thread1"); Sleep(600); cout<<"Thread1 "<<name<<endl; LeaveCriticalSection(&g_cs); } return 0; } unsigned __stdcall ThreadPoc2( void* pArguments) { while(1) { EnterCriticalSection(&g_cs); memset(name,0,sizeof(name)); strcpy(name,"Thread2"); Sleep(500); cout<<"Thread2 "<<name<<endl; LeaveCriticalSection(&g_cs); } return 0; } int _tmain(int argc, _TCHAR* argv[]) { InitializeCriticalSection(&g_cs); HANDLE hThread1=(HANDLE)_beginthreadex(NULL,0,ThreadPoc1,NULL,0,NULL); HANDLE hThread2=(HANDLE)_beginthreadex(NULL,0,ThreadPoc2,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); while(1) { Sleep(500); } DeleteCriticalSection(&g_cs); return 0; }
不加锁会出现不一致的情况
加锁后:
本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232