zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    迭代器
    闭包函数与装饰器
    pyhton的函数
    文件处理
    Python2和Python3编码的区别
    hdu5080:几何+polya计数(鞍山区域赛K题)
    hdu1695:数论+容斥
    HDU3564 --- Another LIS (线段树维护最值问题)
    hdu1521:排列组合---指数型母函数
    poj1014:母函数+优化
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/2419923.html
Copyright © 2011-2022 走看看