• 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;
    }
    
    

    不加锁会出现不一致的情况

    加锁后:

    本人新博客网址为:http://www.hizds.com
    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
  • 相关阅读:
    python3使用多代理访问网站
    批处理写的俄罗斯方块
    Robot Framework安装指南
    Robot Framework 快速入门_英文版
    Robot Framework 快速入门_中文版
    python3操作注册表设置/取消IE代理
    在python3下用PIL做图像处理
    python win32api 使用小技巧
    Python小技巧1
    python编码-1
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2419923.html
Copyright © 2020-2023  润新知