首页 > 其他分享 >基于 “CRITICAL_SECTION“ 的同步方法

基于 “CRITICAL_SECTION“ 的同步方法

时间:2024-03-25 13:58:59浏览次数:20  
标签:同步 EnterCriticalSection SECTION 临界 CRITICAL 线程 cs

CRITICAL_SECTION 在Windows操作系统中通常用于同步多个线程,确保一次只有一个线程可以访问特定的代码段或资源。这对于防止数据竞争和不一致至关重要。以下是使用 CRITICAL_SECTION 的基本步骤:

  1. 声明和初始化:
    首先,你需要声明一个 CRITICAL_SECTION 类型的变量。然后,使用 InitializeCriticalSection 函数来初始化这个变量。

    CRITICAL_SECTION cs; 
    InitializeCriticalSection(&cs);
  2. 进入临界区:
    在你想要保护的代码段之前,使用 EnterCriticalSection 函数进入临界区。这将阻止其他线程进入临界区,直到当前线程离开临界区。

    EnterCriticalSection(&cs);
  3. 访问共享资源:
    在 EnterCriticalSection 和 LeaveCriticalSection 之间,你可以安全地访问共享资源,不会有其他线程同时访问。

    g_sharedResource = newValue;
  4. 离开临界区:
    一旦你完成了对共享资源的访问,使用 LeaveCriticalSection 函数来离开临

标签:同步,EnterCriticalSection,SECTION,临界,CRITICAL,线程,cs
From: https://blog.csdn.net/wy_yyh/article/details/137011377

相关文章

  • non constant or forward reference address expression for section .ARM.extab 错误
    编译时报错:FAILED:STM32F103RET6_Test001.elfcmd.exe/C"cd.&&D:\ProgramFiles\gcc-arm-none-eabi\bin\arm-none-eabi-gcc.exe-g-Wl,-gc-sections,--print-memory-usage,-Map=D:/ProjectCode/CLion/test/STM32F103RET6_Test001/cmake-build-debug-arm-......
  • 同步通信 and 异步通讯
    同步调用存在的问题 异步调用方案:时间驱动模式 优势:1、服务解耦(添加服务不用修改支付服务的代码)2、性能提升、吞吐量的提高(支付成功之后,后续的服务和支付服务没有关系,由Broker事件通知完成)3、服务没有强依赖,不担心级联失败问题4、流浪削峰 总结:......
  • 广州大学第十八届ACM大学生程序设计竞赛(同步赛)——题解
    这套题我答的很失败。没有按照题目的难度去答题,前期浪费了不少时间。题目:A-字符画题解:思维、模拟。这道题我的通过率为62.5,没有过的原因是因为对细节的处理和把控不到位,对一些点忽视,我也记录了搜索的过程,但没有把搜索过的点消掉,而且没有找到最好的顺序去解答这道题,我是按照横的......
  • 牛客--2024中国传媒大学程序设计大赛(同步赛)
    A-小苯的区间和疑惑题意:做法:前缀最大值+后缀最大值 or 线段树维护最大子段和intarr[200005],pre[200005],last[200005];voidsolve(){//小笨的区间和疑惑--前缀最大值+后缀最大值or线段树维护最大自段和intn;cin>>n;for(inti=1;i<=n;i++)cin......
  • Redis中AOF文件重写与同步
    AOF文件的写入与同步Redis服务器进程就是一个时间循环(loop),这个循环中的文件时间负责接收客户端的命令请求,以及向客户端发送命令回复,而时间事件则负责执行像serverCron函数这样需要定时运行的函数。因为服务器在处理文件事件时可能会执行些命令,使得一些内容被追加到aof_b......
  • Linux环境下使用Eclipse Paho C 实现(MQTT Client)同步模式发布和订阅Message
    目录概述1同步模式和异步模式1.1同步模式1.2异步模式2下载和安装paho.mqtt.c3同步方式发布和订阅消息功能实现3.1MQTTClient参数配置3.2初始化MQTTClient3.3发布消息功能3.4订阅消息功能3.5解析订阅的信息4编译和测试4.1编译代码4.2运行5验证MQ......
  • 自动同步 Github 仓库到 Gitee 仓库
    自动同步你的Github仓库到Gitee仓库个人公私钥的创建ssh-keygen-ted25519-C"GiteeSSHKeyforGithubAction"输出,如:Generatingpublic/privateed25519keypair.Enterfileinwhichtosavethekey(/home/git/.ssh/id_ed25519):#输入保存路径Enterpassphra......
  • 不容错过的BUCK DCDC同步降压电路TPS563202
    1.TPS563202,优秀的17V转5V转3.3V降压DCDC电路参数优异,体积小,价格甚至比国产的还低,参数超过这个DCDC,价格低于这个DCDC的,请告知,国内器件厂家太多了,个人只了解一部分。12V转5V转3.3V转2.5V转1.8V都可以的。特点:标注3A,可输出3A电流,同步降压,无需外部肖特基输入电压范围:4.3V......
  • unity Mirror网络同步
    我们直接来剖析,上干货在github上的主页代码,稍微修改了下:usingSystem.Collections;usingSystem.Collections.Generic;usingMirror;usingUnityEngine;publicclassPlayer:NetworkBehaviour{//Syncedautomatically//自动同步[SyncVar]publicinthe......
  • 操作系统综合题之“用记录型信号量机制的wait操作和signal操作写出三个进程的同步代码
    1.问题:假设一个水果赛选系统由三个进程A、B、C组成。进程A每次取一个水果,之后存放在货架F上,F的容量为每次只能存放一个水果。若货架上存放的是苹果则让进程B取出,并存放到苹果箱中;若货架上存放的是菠萝则让进程C取出后,将其存放到菠萝框中(1)列出所需的信号量并初始化(2)请用记录型信......