热门标签 | 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


推荐阅读
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 深入解析 ELF 文件格式与静态链接技术
    本文详细探讨了ELF文件格式及其在静态链接过程中的应用。在C/C++代码转化为可执行文件的过程中,需经过预处理、编译、汇编和链接等关键步骤。最终生成的可执行文件不仅包含系统可识别的机器码,还遵循了严格的文件结构规范,以确保其在操作系统中的正确加载和执行。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 在多堆石子游戏中,通过分析Nim博弈策略,探讨了如何在限定时间和内存条件下实现最优解。本文详细研究了石子游戏中的数学原理和算法优化方法,旨在为参与者提供有效的策略指导。具体而言,文章讨论了不同堆数下的Nim值计算及其应用,帮助玩家在复杂的博弈环境中取得优势。 ... [详细]
  • 在Python编程中,探讨了并发与并行的概念及其区别。并发指的是系统同时处理多个任务的能力,而并行则指在同一时间点上并行执行多个任务。文章详细解析了阻塞与非阻塞操作、同步与异步编程模型,以及IO多路复用技术的应用。通过模拟socket发送HTTP请求的过程,展示了如何创建连接、发送数据和接收响应,并强调了默认情况下socket的阻塞特性。此外,还介绍了如何利用这些技术优化网络通信性能和提高程序效率。 ... [详细]
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
  • C++ STL 常见函数应用详解与实例解析
    本文详细解析了 C++ STL 中常见函数的应用,并通过具体实例进行说明。特别地,文章对迭代器(iterator)的概念进行了深入探讨,将其视为一种将迭代操作抽象化的工具,便于在不同容器间进行元素访问和操作。此外,还介绍了迭代器的基本类型、使用方法及其在算法中的应用,为读者提供了丰富的实践指导。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 在进行网络编程时,准确获取本地主机的IP地址是一项基本但重要的任务。Winsock作为20世纪90年代初由Microsoft与多家公司共同制定的Windows平台网络编程接口,为开发者提供了一套高效且易用的工具。通过Winsock,开发者可以轻松实现网络通信功能,并准确获取本地主机的IP地址,从而确保应用程序在网络环境中的稳定运行。此外,了解Winsock的工作原理及其API函数的使用方法,有助于提高开发效率和代码质量。 ... [详细]
  • 本文介绍了使用 Python 编程语言高效抓取微博文本和动态网页图像数据的方法。通过详细的示例代码,展示了如何利用爬虫技术获取微博内容和动态图片,为数据采集和分析提供了实用的技术支持。对于对网络数据抓取感兴趣的读者,本文具有较高的参考价值。 ... [详细]
  • [Swift]LeetCode688. “马”在棋盘上的概率 | Knight Probability in Chessboard
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤ ... [详细]
  • 搜索栏算是UI中很简单的一个操作了,拖一个搜索栏上来。   搜索栏中比较重要的属性是占位符,也就是图中右侧的Placeholder,比如输入“请输入关键字”,显示如下: ... [详细]
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社区 版权所有