zoukankan      html  css  js  c++  java
  • 关于同一线程两次调用EnterCriticalSection的测试

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    #include <windows.h>
    #include <process.h>
    CRITICAL_SECTION cs;
    
    //1.测试同一线程两次EnterCriticalSection会不会阻塞
    //答案:不会
    /*
    int _tmain(int argc, _TCHAR* argv[])
    {
        InitializeCriticalSection(&cs);
        EnterCriticalSection(&cs);
        EnterCriticalSection(&cs);
        for(int i = 0;i < 20;i++)
        {
            cout<<"MainThread:"<<i<<endl;
            Sleep(1000);
        }
        LeaveCriticalSection(&cs);
        DeleteCriticalSection(&cs);
        system("pause");
        return 0;
    }
    */
    
    
    //2.测试同一线程两次EnterCriticalSection,调用一次LeaveCriticalSection 另一个线程是否可以以EnterCriticalSection
    //答案:不可以 两次EnterCriticalSection 必须调用 LeaveCriticalSection两次
    unsigned  __stdcall ThreadPorc ( void * )
    {
        for(int i = 0;i<20;i++)
        {
            EnterCriticalSection(&cs);
            cout<<"线程2进入"<<endl;
            break;
            LeaveCriticalSection(&cs);
            Sleep(1000);
        }
        return 0;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        InitializeCriticalSection(&cs);
        EnterCriticalSection(&cs);
        EnterCriticalSection(&cs);
        _beginthreadex(NULL,0,ThreadPorc,NULL,0,NULL);
        for(int i = 0;i < 20;i++)
        {
            if(i == 10)
            {
                LeaveCriticalSection(&cs);
            }
            cout<<"MainThread:"<<i<<endl;
            Sleep(1000);
        }
        LeaveCriticalSection(&cs);
        Sleep(5000);
        DeleteCriticalSection(&cs);
        system("pause");
        return 0;
    }
  • 相关阅读:
    HTCVive摄像头的一些好玩的现象
    AI之A*算法
    C#预处理器指令之#define/#undefine/#if/#elif/#else/#endif
    AI之有限状态机
    Unity之动态加载场景资源
    Canvas
    DFGUI之界面文字显示异常
    Unity Application
    AI:确定性AI
    php正则表达式
  • 原文地址:https://www.cnblogs.com/zhangdongsheng/p/4189733.html
Copyright © 2011-2022 走看看