码迷,mamicode.com
首页 > 编程语言 > 详细

关于同一线程两次调用EnterCriticalSection的测试

时间:2014-12-28 11:39:19      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

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

 

关于同一线程两次调用EnterCriticalSection的测试

标签:

原文地址:http://www.cnblogs.com/zhangdongsheng/p/4189733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!