热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

临界区条件,临界区是一段程序

以下函数以Delphi2009中的函数格式为准。该过程多半在窗体创建时或在程序初始化时执行。其声明如下:procedureInitializeCriticalSection;s


以下同步技术通常有两种:直接使用WindowsAPI函数和使用


Delphi封装API函数的类。


以下函数符合Delphi2009函数格式:


1 .关键区段临界区


关键节是最直接的线程同步方式。 关键节是一次只能在一个线程上运行的段


代码。 例如,如果将初始化数组的代码放在临界区域内,则另一个线程在第一个线程处理完毕之前无法进行


已执行。 关键节速度很快,因此非常适合序列化对单个进程中数据的访问。


(1) .使用EnterCriticalSection (和LeaveCriticalSection ) ) API函数


在使用关键节之前,必须定义并使用TRTLCriticalSection类型的记录变量


InitializeCriticalSection ()过程初始化临界区域。 此过程大部分发生在创建表单或初始化程序时


点击


其声明如下


procedureinitializecriticalsection (varlpcriticalsection : trtlcriticalsection; stdcall;


lpCriticalSection参数是TRTLCriticalSection类型的记录,是参数。 关于


TRTLCriticalSection的定义并不重要,因为很少看到此记录的具体内容。


只需在lpCriticalSection中传递未初始化的记录,InitializeCriticalSection (


填补这个记录。


注意:微软故意隐藏了TRTLCriticalSection的详细信息。 为什么这么说,是因为其内容位于不同的硬件平台上


2


上面不是。 在基于Intel的平台上,TRTLCriticalSection显示计数器和当前


线程的域和系统事件的句柄。 在alpha平台上,计数器将被称为spinlock的alpha-CPU数据结构所替换。


记录填写后,我们可以开始创建临界区。 在这种情况下,可以使用EnterCriticalSection ()和


LeaveCriticalSection ) )封装代码块。 这两个函数分别表示进入和离开临界区域,是同步的


代码块位于这两个函数之间。 第一个线程调用EnterCriticalSection ()后,所有其他线程


线程将无法进入代码块,并等待第一个线程离开关键节。 下一个线程等待调整第一个线程


可以使用LeaveCriticalSection () ) )来唤醒。 这两个进程的声明如下:


procedureentercriticalsection (varlpcriticalsection : trtlcriticalsection; stdcall; //进入临界区


procedureleavecriticalsection (varlpcriticalsection : trtlcriticalsection; stdcall; //离开临界




如您所见,参数lpCriticalSection是用InitializeCriticalSection ()填充的记录。


如果在一个子线程运行EnterCriticalSection ()之前,另一个线程已进入临界区域且尚未离开


打开关键节后,其子线程将锁定,并无限期等待另一个线程离开关键节。 要使时间为0而不锁定


等等,必须使用TryEnterCriticalSection ()。 进程声明如下:


函数加密(varlpcriticalsection 3360 trtlcriticalsection ) :布尔; stdcall;


本文来自电脑杂谈,转载请注明正文网站:


3358 www.PC-LHD yx.com/a/jisuanji Xue/article-32871-13.html


推荐阅读
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
author-avatar
lily-SweetDream_828
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有