当前位置: 首页 > news >正文

关于同一线程两次调用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;
}
复制代码

 

出处: http://www.cnblogs.com/zhangdongsheng/
作者: 张东升

相关文章:

  • 顶级MySQL主从复制企业应用
  • Struts2利用拦截器实现权限控制
  • kvm虚拟化学习笔记(十三)之kvm虚拟机磁盘文件读取小结
  • Python回顾与整理4:序列1—字符串
  • python小代码之阶乘求和
  • ibatis动态生成列时的列名无效
  • 通过构造函数来创建新对象
  • Python字符串、列表、元组、集合、字典方法
  • 【MongoDB学习笔记32】MongoDB修改副本集配置
  • iptables防火墙 --Linux详解
  • CentOS 7.2 安装图解教程
  • MongoDB主从
  • Linux系统使用lvm扩展根分区
  • 【人工智能】 火爆的机器学习和人工智能,为何在金融业四处碰壁?
  • 定制你的敏捷方法:以结果为导向
  • 【刷算法】求1+2+3+...+n
  • AWS实战 - 利用IAM对S3做访问控制
  • IDEA常用插件整理
  • js面向对象
  • Markdown 语法简单说明
  • nginx 配置多 域名 + 多 https
  • quasar-framework cnodejs社区
  • Shadow DOM 内部构造及如何构建独立组件
  • VUE es6技巧写法(持续更新中~~~)
  • 半理解系列--Promise的进化史
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 浮动相关
  • 工作中总结前端开发流程--vue项目
  • 看域名解析域名安全对SEO的影响
  • 你真的知道 == 和 equals 的区别吗?
  • 排序算法学习笔记
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用common-codec进行md5加密
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 思考 CSS 架构
  • 栈实现走出迷宫(C++)
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​水经微图Web1.5.0版即将上线
  • # include “ “ 和 # include < >两者的区别
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • ###项目技术发展史
  • %@ page import=%的用法
  • (arch)linux 转换文件编码格式
  • (二)学习JVM —— 垃圾回收机制
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (三) diretfbrc详解
  • (一)80c52学习之旅-起始篇
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net 7 上传文件踩坑
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • ::
  • :not(:first-child)和:not(:last-child)的用法
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @media screen 针对不同移动设备