关于同一线程两次调用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 = ;i<;i++)
{
EnterCriticalSection(&cs);
cout<<"线程2进入"<<endl;
break;
LeaveCriticalSection(&cs);
Sleep();
}
return ;
}
int _tmain(int argc, _TCHAR* argv[])
{
InitializeCriticalSection(&cs);
EnterCriticalSection(&cs);
EnterCriticalSection(&cs);
_beginthreadex(NULL,,ThreadPorc,NULL,,NULL);
for(int i = ;i < ;i++)
{
if(i == )
{
LeaveCriticalSection(&cs);
}
cout<<"MainThread:"<<i<<endl;
Sleep();
}
LeaveCriticalSection(&cs);
Sleep();
DeleteCriticalSection(&cs);
system("pause");
return ;
}
关于同一线程两次调用EnterCriticalSection的测试的更多相关文章
- Java里一个线程两次调用start()方法会出现什么情况
Java的线程是不允许启动两次的,第二次调用必然会抛出IllegalThreadStateException,这是一种运行时异常,多次调用start被认为是编程错误. 如果业务需要线程run中的代码再 ...
- 面试刷题17:线程两次start()会发生什么?
线程是并发编程的基础元素,是系统调度的最小单元,现代的jvm直接对应了内核线程.为了降低并发编程的门槛,go语言引入了协程. 你好,我是李福春,我在准备面试,今天的题目是? 一个线程两次调用start ...
- Android-Java-Thread线程两种方式的使用场景
Thread线程两种方式的优点/缺点 extends Thread 方式: 缺点:存在耦合度(因为线程任务run方法里面的业务逻辑 和 线程启动耦合了) 缺点:Cat extends Thread { ...
- Java创建线程后,调用start()方法和run()的区别
1) start方法: 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码.通过调用Thread类的start()方法来启动一个线程,这时此 ...
- 同一个线程多次调用start()会出现的问题
结果: 线程首先会运行一次,然后抛出java.lang.IllegalThreadStateException异常. 根据控制台的异常信息,定位到Thread.java的第708行,也就start() ...
- BeginInvoke 方法真的是新开一个线程进行异步调用吗?
转自原文BeginInvoke 方法真的是新开一个线程进行异步调用吗? BeginInvoke 方法真的是新开一个线程进行异步调用吗? 参考以下代码: public delegate void tre ...
- java future模式 所线程实现异步调用(转载
java future模式 所线程实现异步调用(转载) 在多线程交互的中2,经常有一个线程需要得到另个一线程的计算结果,我们常用的是Future异步模式来加以解决.Future顾名思意,有点像期货市场 ...
- LoadRunner调用java函数测试oracle
LoadRunner调用java函数测试oracle 测试oracle的方法有很多,可以使用loadrunner的oracle协议直接调用oracle进行测试,也可以调用开发的java程序对oracl ...
- Mongodb 5节点异地两中心故障转移恢复测试案例
Mongodb5节点异地两中心故障转移恢复测试案例 架构方式:5节点,主中心(2数据1仲裁),备中心(1数据1仲裁) 1基本情况 操作系统:Red Hat Enterprise Linux Serve ...
随机推荐
- 【SAM】BZOJ2882-工艺
[题目大意] 求一个循环数列的最小表示法. [思路] 最小表示法的正解:★ SAM乱搞,和前面的POJ那道一样.然而MLE了,当作学习一下map的用法^ ^ map的使用方法(来源:☆) 一.map的 ...
- 【DFS】POJ3009-Curling 2.0
[题目大意] 给出一张地图,一旦往一个方向前进就必须一直向前,直到一下情况发生:(1)碰到了block,则停在block前,该block消失:(2)冲出了场地外:(3)到达了终点.改变方向十次以上或者 ...
- JDK源码学习笔记——HashMap
Java集合的学习先理清数据结构: 一.属性 //哈希桶,存放链表. 长度是2的N次方,或者初始化时为0. transient Node<K,V>[] table; //最大容量 2的30 ...
- 【MySQL笔记】解除输入的安全模式,Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE tha ...
- cookie和localStorage、sessionStorage的区别
先来讲讲localStorage吧,我最初接触localStorage,是听一个同学说他在做项目的过程中用到过这个.但是我自己也用到过的,就是在学习React的时候,在做一个小demo,这个demo简 ...
- PHP数组和数据结构(上)
1.数组的声明 两种方法: 直接给数组元素赋值 使用array()函数声明 说明: (1)索引数组的下标可以是非连续的值,只要在初始化时指定非连续的下标值即可 如果指定的下标值已经声明过,则属于对变量 ...
- In c++ access control works on per-class basis not on per-object basis.
#ifndef MYTIME_H #define MYTIME_H class MyTime { private: int m_hour; int m_minute; public: MyTime() ...
- 解决新浪微博API调用限制 突破rate_limit_status瓶颈
新浪微博开放平台API的调用和TWITTER接口一样,都是受限的,以小时为单位进行限定. 他有两个限制原则 1.用户不登录基于IP的限制,每小时1000次 2.用户登录了基于用户的限制,每小时1000 ...
- 统一D3D与OpenGL坐标系统
作者:游蓝海(http://blog.csdn.net/you_lan_hai) DirectX 3D与OpenGL坐标系统的差异性,给我们带来非常大的麻烦.让跨平台编程的新手非常困惑.近期在做一个跨 ...
- 通用Json的处理办法
1.Json的格式: 对象{"name": "value", "name1": "value1"} 对象包含对象数组{& ...