EnterCriticalSection 和 LeaveCriticalSection[通俗易懂]

EnterCriticalSection 和 LeaveCriticalSection[通俗易懂]EnterCriticalSection和LeaveCriticalSection是干嘛用的?多个线程操作相同的数据(内存块)时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据,变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这两个函数就是实现这种功能的。作用域:不是针对于资源的,而是针对于不同线程间的代码段的什么是临界区:临界区是一种轻量级机制,在某一时…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

EnterCriticalSection和LeaveCriticalSection是干嘛用的?
多个线程操作相同的数据(内存块)时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据,变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这两个函数就是实现这种功能的。

作用域:
不是针对于资源的,而是针对于不同线程间的代码段的

什么是临界区:
临界区是一种轻量级机制,在某一时间内只允许一个线程执行某个给定代码段。通常在修改全局数据(如集合类)时会使用临界区。事件、多用户终端执行程序和信号量也用于多线程同步,但临界区与它们不同,它并不总是执行向内核模式的控制转换,这一转换成本昂贵。要获得一个未占用临界区,事实上只需要对内存做出很少的修改,其速度非常快。只有在尝试获得已占用临界区时,它才会跳至内核模式。这一轻量级特性的缺点在于临界区只能用于对同一进程内的线程进行同步。

在临界区未被使用的理想情况中,对 EnterCriticalSection 的调用非常快速,因为它只是读取和修改用户模式内存中的内存位置。

如果有多个线程被阻止于一个临界区中,当另一线程释放该临界区时,只有一个线程获得该临界区。

临界区API:
临界区初始化以及删除:
InitializeCriticalSection()DeleteCriticalSection()
临界区两个操作原语: 
EnterCriticalSection()LeaveCriticalSection()

对于临界区的操作,(EnterCriticalSection)操作,采用的是主动进入临界区。意思就是,当没有能够进入时,不停的主动尝试进入,直至进入为止。这种主动进入的方式,称为自旋(也叫忙等待)。
被动方式:获取不到后,进入等待队列,当要获取的对象被释放后,系统唤醒等待的线程,这个方式叫做被动方式。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191315.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 调度服务 ScheduledExecutorService 经常卡顿问题的排查及解决方法

    调度服务 ScheduledExecutorService 经常卡顿问题的排查及解决方法如上述代码所示,启动10个调度线程,延迟10秒,开始执行定时逻辑,然后每隔2秒执行一次定时任务。定时任务类为`TaskWorker`,其要做的事就是根据`offset`和`rows`参数,到数据库捞取指定范围的待处理记录,然后送到`TaskService`的`processTask`方法中进行处理。从逻辑上来看,该定时没有什么毛病,但是在执行定时任务的时候,却经常出现卡顿的问题,表现出来的现象就是:**定时任务不执行了**。

    2022年5月5日
    139
  • linux vim查找关键字[通俗易懂]

    linux vim查找关键字[通俗易懂]/关键字输入n,回车,搜索下一个关键字

    2022年6月21日
    33
  • pycharm安装步骤2021_2021年上映时间表

    pycharm安装步骤2021_2021年上映时间表安装PyCharm2022教程下载安装PyCharm安装Python配置PyCharm环境使用PyCharmPyCharm界面介绍一、下载安装PyCharmpycharm在官网上的下载地址:2.专业版,社区版。建议安装专业版。下载文件会显示3.单击“安装”修改安装路径。建议安装磁盘C以外的位置。修改后,单击“下一步”。4.这里功能选项,全部勾选,或者根据自己需求选择;5.接下来,单击“安装”打开安装界面。二、安装Python如果您以前没有下载过Python解释器,则需

    2022年8月28日
    1
  • 好员工,别以为裁员与你无关(上

    好员工,别以为裁员与你无关(上分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!               版权声明:原创作品,允

    2022年7月17日
    15
  • mbus总线电路_CPU电路

    mbus总线电路_CPU电路发送也就是24V,36V切换,24V低电平,36V是高电平;主机接收电路可以高端放大也可以低端放大,设备端只会消耗固定的电流,mbus网络趋于稳定,负载时稳定的,当设备端发送数据时,mbus网络中电流会有所变化,通过采样电阻,电压跟随器,差分放大,采样保持电路,获取ttl电平,短路过载保护也是通过低端采样电阻控制供电开关的。…

    2022年10月15日
    1
  • R语言 画图坐标文字旋转方向

    ggplot画图:rotate_x_text()转置横坐标的字体,ggpubr包barplot画柱状图,las=2转置横坐标

    2022年4月9日
    232

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号