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

 

相关文章
|
3月前
|
Cloud Native Java 调度
项目环境测试问题之线程同步器会造成执行完任务的worker等待的情况如何解决
项目环境测试问题之线程同步器会造成执行完任务的worker等待的情况如何解决
|
3月前
|
Java 测试技术
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
60 0
|
5月前
|
存储 测试技术
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
57 0
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
|
5月前
|
安全 Java
如何测试map对象的线程不安全
【6月更文挑战第20天】如何测试map对象的线程不安全
41 0
|
6月前
|
安全 前端开发 测试技术
《C++ Concurrencyin Action》第10章--多线程程序的测试和调试
《C++ Concurrencyin Action》第10章--多线程程序的测试和调试
|
6月前
|
存储 安全 Java
手撕线程池与性能测试
手撕线程池与性能测试
118 0
|
6月前
|
安全 Java
ConcurrentHashMap扩容的详细介绍以及多线程测试(基于JDK1.8)
ConcurrentHashMap扩容的详细介绍以及多线程测试(基于JDK1.8) ConcurrentHashMap是Java中线程安全的哈希表实现。它使用了锁分段技术,将哈希表分成多个Segment(默认为16),每个Segment都是一个独立的哈希表,每个Segment内部维护一个ReentrantLock锁,对于不同的Segment,它们可以被并发访问。当进行put、get等操作时,只需要获取对应Segment的锁即可,大大提高了并发访问的效率。
172 0
|
测试技术 调度
性能测试(9)——线程组详解
线程数:虚拟用户数 Ramp-Up时间(秒):启动全部虚拟用户数所需要的时间 循环次数:指定次数或勾选永远。使用调度器时,必须勾选永远 延迟创建线程直到需要:测试开始的时候,所有线程就被创建完。勾选了此选项,那么线程只会在合适的需要用到的时候创建 调度器:勾选后,调度器配置才能使用;
178 0
|
Web App开发 移动开发 前端开发
Selenium+Python3之:多线程进行跨浏览器测试
Selenium+Python3之:多线程进行跨浏览器测试
306 1
Selenium+Python3之:多线程进行跨浏览器测试