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

CRITICAL_SECTION 用法

#include <stdio.h>
#include <windows.h>


typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
CRITICAL_SECTION g_cs; //声明关键段

// 共享资源
char g_cArray[10];

unsigned int g_Count = 0;
DWORD WINAPI ThreadProc10(LPVOID pParam)
{
    // 进入临界区
    EnterCriticalSection(&g_cs);
    // 对共享资源进行写入操作
    for (int i = 0; i < 10; i++)
    {
        g_Count++;
        printf("g_Count is %d\n", g_Count);
        Sleep(1);
    }
    // 离开临界区
    LeaveCriticalSection(&g_cs);
    return 0;
}

DWORD WINAPI ThreadProc11(LPVOID pParam)
{
    // 进入临界区
    EnterCriticalSection(&g_cs);
    // 对共享资源进行写入操作
    for (int i = 0; i < 10; i++)
    {
        g_Count--;
        printf("g_Count is %d\n", g_Count);
        Sleep(1);
    }
    // 离开临界区
    LeaveCriticalSection(&g_cs);
    return 0;
}

int main()
{
    // 初始化临界区
    InitializeCriticalSection(&g_cs);
    // 启动线程
    HANDLE ThreadProcHand10 = CreateThread(NULL, 0, ThreadProc10, 0, 0, NULL); // 创建线程
    HANDLE ThreadProcHand11 = CreateThread(NULL, 0, ThreadProc11, 0, 0, NULL); // 创建线程
    // 等待计算完毕
    Sleep(300);
    return 0;
}

输出:

线程中,屏蔽掉  EnterCriticalSection(&g_cs)和LeaveCriticalSection(&g_cs) 将打印如下:

 

 

相关文章:

CRITICAL_SECTION 用法

#include <stdio.h> #include <windows.h> typedef RTL_CRITICAL_SECTION CRITICAL_SECTION; CRITICAL_SECTION g_cs; //声明关键段 // 共享资源 char g_cArray[10]; unsigned int g_Count 0; DWORD WINAPI ThreadProc10(LPVOID pParam) { // 进入临界区 …...

汇川运动控制产品故障排查

针对汇川伺服产品&#xff08;IS600/IS620&#xff09;的基本检测和一些出现频率较高的故障进行检测判断方法&#xff0c;适用于服务人员在现场排查/判断机器故障时&#xff0c;准确定位问题。 一、简单故障排查 注1&#xff1a;接线错误&#xff1a;1、UVW相序是否正确&#…...

【Groups】50 Matplotlib Visualizations, Python实现,源码可复现

详情请参考博客: Top 50 matplotlib Visualizations 因编译更新问题&#xff0c;本文将稍作更改&#xff0c;以便能够顺利运行。 1 Dendrogram 树状图根据给定的距离度量将相似的点组合在一起&#xff0c;并根据点的相似性将它们组织成树状的链接。 新建文件Dendrogram.py: …...

windows安装kafka配置SASL-PLAIN安全认证

目录 1.Windows安装zookeeper&#xff1a; 1.1下载zookeeper 1.2 解压之后如图二 1.3创建日志文件 1.4复制 “zoo_sample.cfg” 文件 1.5更改 “zoo.cfg” 配置 1.6新建zk_server_jaas.conf 1.7修改zkEnv.cmd 1.8导入相关jar 1.9以上配置就配好啦&#xff0c;接下来启…...

【Linux】五种IO模型

文章目录 1. IO基本概念2. 五种IO模型2.1 五个钓鱼的例子2.2 五种IO模型2.2.1 阻塞IO2.2.2 非阻塞IO2.2.3 信号驱动IO2.2.4 IO多路转接2.2.5 异步IO 1. IO基本概念 认识IO IO就是输入和输出&#xff0c;在冯诺依曼体系结构中&#xff0c;将数据从输入设备拷贝到内存就叫输入&am…...

SCT82A30DHKR_5.5V-100V Vin同步降压控制器

SCT82A30是一款100V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输入电压下降期间&am…...

备忘录模式(C++)

定义 在不破坏封装性的前提下&#xff0c;捕获一-个对象的内部状态&#xff0c;并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 应用场景 ➢在软件构建过程中&#xff0c;某些对象的状态在转换过程中&#xff0c;可能由于某种需要&#xff0c;要…...

二叉排序树(二叉查找树)

二叉排序树&#xff08;二叉查找树&#xff09;的性质&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有结点的值均小于它的根结点的值。若它的右子树不为空&#xff0c;则右子树上所有结点的值均大于它的根将诶点的值。它的左、右子树也分别为二叉排序树。 对二叉…...

Python简单应用VII

题目 编程实现下述各题。 1.使用异常处理结构捕获多种可能的异常&#xff0c;如列表下标索引越界异常(IndexError)、试 图访问一个系统对象没有的属性所发生的异常(AttributeError)、读一个文件但该文件不存在。 2. 新建并打开文件stud1.txt&#xff0c;如果文件已存在就提示“…...

mysql--InnoDB存储引擎--架构和事务

MySQL进阶篇 文章目录 架构1、逻辑结构InnoDB 逻辑存储单元主层级关系图&#xff1a;1、表空间2、段3、区4、页5、行总结&#xff1a; 2、架构2、1 内存架构2、2 磁盘架构 3、事务3、1事务基础&#xff08;1&#xff09;事务&#xff08;2&#xff09;特性 架构 1、逻辑结构 I…...

0基础学习VR全景平台篇 第79篇:全景相机-泰科易如何直播推流

泰科易科技是中国的一家研发全景相机的高科技公司&#xff0c;前不久&#xff0c;在2020世界VR产业大会上发布了新一代5G VR直播影像采集终端--360starlight。以其出色的夜景成像效果和一“部”到位的直播方案重新定义了VR慢直播相机&#xff0c;对行业具有高度借鉴意义。 本文…...

代码调试4:实现退化模型的训练

代码调试:实现退化模型的训练 作者:安静到无声 个人主页 目录 代码调试:实现退化模型的训练问题1:如何在coco原始编码的基础上修改原始的文件?**方法1**:修改生成的文件**方法2**:直接修改源文件`instances_train2014.json`和`instances_val2014.json`问题2:构建退化后…...

8.7工作总结

一、我们想自定义一个titileBar出现如下这种情况&#xff0c;发现他原来的titileBar还未隐藏。 后来我尝试修改主题使得他没有主题noActionBar发现也不行&#xff0c;后来我参考原先我看过的项目使用了如下代码 this.getActionBar().hide();发现会报这个错误java.lang.NullPoi…...

数据库的约束 详解

一、约束的概述 1.概念:约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 2&#xff0e;目的:保证数据库中数据的正确、有效性和完整性。 3.分类: 约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不…...

Tomcat 编程式启动 JMX 监控

通过这篇文章&#xff0c;我们可以了解到&#xff0c;利用 JMX 技术可以方便获取 Tomcat 监控情况。但是我们采用自研的框架而非大家常见的 SpringBoot&#xff0c;于是就不能方便地通过设置配置开启 Tomcat 的 JMX&#xff0c;——尽管我们也是基于 Tomcat 的 Web 容器&#x…...

Git rebase和merge区别详解

文章目录 变基的基础用法变基过程中的冲突解决冲突后无法push问题更新变基后的代码更有趣的变基用法变基的风险用变基解决变基变基 vs 合并 此文在阅读前需要有一定的git命令基础&#xff0c;若基础尚未掌握&#xff0c;建议先阅读这篇文章Git命令播报详版 在 Git 中整合来自不…...

JDK动态代理的原理解析、代码实现

代理就像是&#xff1a;买家(客户端)——销售(代理对象)——工厂(目标) 买家不用直接去工厂买&#xff0c;而是直接通过销售就可以购买到&#xff0c;假设工厂生产的是杯子&#xff0c;那么工厂只需要提供杯子&#xff0c;而销售在不改变杯子的生产过程的情况下对杯子进行包装设…...

理解和使用Ansible模块,简化自动化任务

Ansible是一款强大的自动化工具&#xff0c;用于管理和配置IT基础设施。在Ansible的世界中&#xff0c;模块&#xff08;Module&#xff09;是至关重要的组成部分。本文将深入探讨Ansible模块&#xff0c;了解它们如何简化自动化任务的执行过程。 Ansible模块是Ansible的核心组…...

Docker 快速安装 MinIO

概述 MinIO 是一款基于Go语言的高性能对象存储服务&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 拉取docker镜像 docker pull minio/minio创建宿主机数据目录&#xff08;共享数据卷&#xff09; 此…...

【源码分析】Nacos如何使用AP协议完成服务端之间的数据同步?

AP节点的同步使用的是异步任务消息队列的方式来实现的。 取出任务之后将会放入到一个List集合中。 然后会发现任务的执行是由条件的。 首先是当前集群的节点数量等于1000&#xff0c;那么此时会直接开始同步&#xff0c;当然这个条件在小项目中不会成立&#xff0c;所以还有…...

黑客删除服务器数据后,间谍软件制造商 LetMeSpy 关闭

总部位于波兰的间谍软件 LetMeSpy 已不再运行&#xff0c;并表示将在 6 月份的一次数据泄露事件中关闭其服务器&#xff0c;其中包括从数千名受害者手机中窃取的大量数据。 LetMeSpy 在其网站上以英语和波兰语发布的通知中确认该间谍软件服务已“永久关闭”&#xff0c;并将于 …...

ebay儿童书包产品CPC认证

儿童书包是一种能够盛放书本或者文具的包。现在的书包五花八门&#xff0c;以普通的布料或者是帆布等制成&#xff0c;有背带&#xff0c;包内一般分栏。一般分三种&#xff0c;背在身后的&#xff0c;挎在肩上的&#xff0c;轮式&#xff08;可以拖行&#xff09;的。 一、美国…...

Debezium系列之:增量快照初始化历史数据实际应用案例

Debezium系列之:增量快照初始化历史数据实际应用案例 一、需求背景二、查看数据库表数据三、使用增量快照采集历史数据四、初始化历史数据一、需求背景 采集数据库数据发送到Kafka Topic,供下游实时开发消费,在采集最新数据的同时,希望把历史数据也发送到Kafka Topic同时采…...

Transformer1.0-预热

一.Encoder encoder:译为编码器&#xff0c;负责将输入序列压缩成指定长度的向量&#xff0c;这个向量就可以堪称是这个序列的语义。然后可进行编码或特征提取等操作 在transformer中encoder由6个相同的层组成&#xff0c;每个层包含 Multi-Head Self-AttentionPosition-Wise …...

【探索Linux】—— 强大的命令行工具 P.2(Linux下基本指令)

前言 前面我们讲了C语言的基础知识&#xff0c;也了解了一些数据结构&#xff0c;并且讲了有关C的一些知识&#xff0c;也相信大家都掌握的不错&#xff0c;今天博主将会新开一个Linux专题&#xff0c;带领大家继续学习有关Linux的内容。今天第一篇文章博主首先带领大家了解一下…...

供应链售后服务自动化,利用软件机器人将数据整合提升效率

随着供应链管理的不断发展&#xff0c;售后服务的重要性也日益凸显。良好的售后服务不仅可以提高客户满意度&#xff0c;还能增强品牌形象和忠诚度。然而&#xff0c;传统的供应链售后服务往往存在繁琐的操作、低效率和易出错的问题。为了解决这一挑战&#xff0c;越来越多的企…...

VIM浅谈

VIM 1. 文件1.1 管理多个文件 仅以此篇纪念VIM作者Bram Moolenaar。 1. 文件 刚刚使用VIM&#xff0c;很多小伙伴疑惑的就是如何退出VIM&#xff0c;一顿乱按结果修改了文件&#xff0c;q又退不出去&#xff0c;还需要保存。这是因为文件是保存在磁盘里的&#xff0c;使用Vim…...

《深度探索c++对象模型》第六章笔记

非原创&#xff0c;在学习 6 执行期语意学(Runtime Semantics) 有这样一个简单的案例&#xff1a; if (yy xx.getValue()) {// ... } 其中&#xff0c;xx和yy的定义为&#xff1a; X xx; Y yy; class Y定义为&#xff1a; class Y { public:Y();~Y();bool operator(con…...

wolfSSL5.6.3 虚拟机ubuntu下编译运行记录(踩坑填坑)

网上相关教程很多(包括wolfSSL提供的手册上也是如此大而化之的描述)&#xff0c;大多类似如下步骤&#xff1a; ./configure //如果有特殊的要求的话可以在后面接上对应的语句&#xff0c;比如安装目录、打开或关闭哪些功能等等 make make install 然后结束&#xff0c;大体…...

JAVA SE -- 第十六天

&#xff08;全部来自“韩顺平教育”&#xff09; IO流 一、文件 是保存数据的地方 2、文件流 文件在程序中是以流的形式来操作 流&#xff1a;数据在数据源&#xff08;文件&#xff09;和程序&#xff08;内存&#xff09;之间经历的路径 输入流&#xff1a;数据从数据…...