当前位置: 首页 > 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) 将打印如下:

 

 

http://www.lryc.cn/news/112908.html

相关文章:

  • 汇川运动控制产品故障排查
  • 【Groups】50 Matplotlib Visualizations, Python实现,源码可复现
  • windows安装kafka配置SASL-PLAIN安全认证
  • 【Linux】五种IO模型
  • SCT82A30DHKR_5.5V-100V Vin同步降压控制器
  • 备忘录模式(C++)
  • 二叉排序树(二叉查找树)
  • Python简单应用VII
  • mysql--InnoDB存储引擎--架构和事务
  • 0基础学习VR全景平台篇 第79篇:全景相机-泰科易如何直播推流
  • 代码调试4:实现退化模型的训练
  • 8.7工作总结
  • 数据库的约束 详解
  • Tomcat 编程式启动 JMX 监控
  • Git rebase和merge区别详解
  • JDK动态代理的原理解析、代码实现
  • 理解和使用Ansible模块,简化自动化任务
  • Docker 快速安装 MinIO
  • 【源码分析】Nacos如何使用AP协议完成服务端之间的数据同步?
  • 黑客删除服务器数据后,间谍软件制造商 LetMeSpy 关闭
  • ebay儿童书包产品CPC认证
  • Debezium系列之:增量快照初始化历史数据实际应用案例
  • Transformer1.0-预热
  • 【探索Linux】—— 强大的命令行工具 P.2(Linux下基本指令)
  • 供应链售后服务自动化,利用软件机器人将数据整合提升效率
  • VIM浅谈
  • 《深度探索c++对象模型》第六章笔记
  • wolfSSL5.6.3 虚拟机ubuntu下编译运行记录(踩坑填坑)
  • JAVA SE -- 第十六天
  • 基于EIoT能源物联网的工厂智能照明系统应用改造-安科瑞黄安南