EnterCriticalSection 和 LeaveCriticalSection[通俗易懂]

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

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

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

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

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

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

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

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

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 建立数据库连接费时吗_数据库连接错误是什么原因

    建立数据库连接费时吗_数据库连接错误是什么原因相信很多朋友都遇到过WordPress提示“建立数据库连接时出错”这个问题,英文为“Errorestablishingadatabaseconnection”。[原创文章:www.777y.com]“建立数据库错误时出错”意味着由于某种原因,您的站点PHP代码无法与MySQL数据库连接以获取显示该页面所需的数据。[本文来自:www.777y.com]数据库连接出错的原因和处理方案数据库连接…

  • Eclipse汉化教程2021新版

    Eclipse汉化教程2021新版Eclipse汉化教程Eclipse汉化教程确定Eclipse的版本方法一:打开eclipse,在启动画面中可以看到eclipse的版本名称(我的版本是2021-6),记住这个版本的名称;方法二:在Eclipse启动后,点击菜单栏中的Help(帮助)>>AboutEclipse(关于EclipseIDE)会弹出的AboutEclipse窗口,在这里也可以找到当前Eclipse的版本名称和版本号(Photon4.8.0);下载汉化包1.到Eclipse的官网上下

  • AD域控制器时间同步[通俗易懂]

    AD域控制器时间同步[通俗易懂]域控制器时间同步现象:域控制器和域内的计算机时间与internet上的时间不同步,老慢几分钟。解决办法:设置NTP服务器,和外网时间同步。下面是最近操作的时间同步方法修改主域控制器上同步Internet时间服务器:主域控制器修改运行gpedit.msc打开本地策略组,路径为:计算机配置-管理模板-系统-Windows时间服务:1.1配置WindowsNTP客户端…

  • 分子模拟软件amber_容天AMBER优化的GPU解决方案

    分子模拟软件amber_容天AMBER优化的GPU解决方案AMBER认证的GPU系统AMBER认证GPU系统提供商容天更快地运行MD仿真容天与AMBER的主要开发商合作开发了交钥匙解决方案,为GPU加速的生物分子模拟提供增值系统。经过验证的系统,每个用户的CPU,GPU,内存和存储具有适当的平衡。从工作站到超级计算机的高度可扩展系统,具有3年保修和支持。容天AMBER优化的GPU加速系统更快地完成MD仿真并不需要花费很多。我们的AMBERG…

  • 几种将网站设为首页的代码是_网页设计基本代码

    几种将网站设为首页的代码是_网页设计基本代码加入收藏夹,设为首页代码把以下代码加入相应位置:加入收藏设为首页鼠标指向时提示设为首页将下列代码插入区中:设为首页打开页面时自动弹出窗口询问是否设为首页将以下代码放在之间:functionmyhomepage(){this.homepage.style.behavior=’url(#default#homepage)’;this.homepag

    2022年10月30日
  • int与bigdecimal的相互转换[通俗易懂]

    int与bigdecimal的相互转换[通俗易懂] int转bigdecimalBigDecimalnumber=newBigDecimal(0);intvalue=score;number=BigDecimal.valueOf((int)value);bigdecimal转intBigDecimalb=newBigDecimal(45.45);inta=b.intValue(); …

发表回复

您的电子邮箱地址不会被公开。

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