delphi多线程访问公共变量

delphi多线程访问公共变量br 一 用 TCriticalSec 类来阻塞 ps 这里的咚咚都涉及 Win32 编程 我对这些不了解 先掌握如何运用吧 这个有点类似临界区 要 UsesSyncObjs 单元 br 1 声明一个全局的 TCriticalSec 类的实例 br 2 建立 TCriticalSec Create 最好是在程序 onCreate 里面 这样才能保证对所有线程进行控制 br 3 在全局变量访问前用 TCriticalSec Acquire 或 TCriticalSec

一、用TCriticalSection类来阻塞。(ps:这里的咚咚都涉及Win32编程,我对这些不了解,先掌握如何运用吧。)这个有点类似临界区。要Uses SyncObjs单元。

1、声明一个全局的TCriticalSection类的实例。

2、建立TCriticalSection.Create,最好是在程序onCreate里面,这样才能保证对所有线程进行控制。

3、在全局变量访问前用TCriticalSection.Acquire或TCriticalSection.Enter来阻塞。

4、访问完毕,用TCriticalSection.Release或TCriticalSection.Leave来解除阻塞。

5、在恰当的位置进行TCriticalSection.Free,一般在程序的onDestroy里。

二、用TMultiReadExclusiveWriteSynchronizer类来阻塞。可以写成TMREWSync。这个类在SysUtils单元里。(ps:天哪,那么长的单词我第一次见)。TMultiReadExclusiveWriteSynchronizer和TCriticalSection不同的是,它允许多个线程同时读一个变量,只是在写一个变量时才需要事先阻塞,因为只有多个线程同时写一个变量才有可能造成冲突。

使用TMREWS的优势是它允许多线程的并发读取,同时又与CriticalSection一样允许读的时候只有一个线程访问。劣势是TMREWS用起来要费更高的代价。

1、声明一个全局的TMultiReadExclusiveWriteSynchronizer类的实例。

2、建立TMultiReadExclusiveWriteSynchronizer.Create。

3、每个线程在读一个全局变量前要先调用该类的BeginRead()来检查是否有其他线程在写这个变量。如果有,就等待,直到其他线程不再写这个变量才返回。当读好后,调用EndRead()来结束。

         如果一个线程要写这个变量,必须先调用BeginWrite()来检查当前是否有其他现成在写这个变量并且所有线程是否都调用了EndRead()。只要有一个线程正在写这个变量,或者有一个线程还没有调用EndRead(),BeginWrite()将一直等待。当线程写完以后,必须及时地调用EndWrite(),一边其他线程可以读写这个全局变量。

4、在恰当的位置进行Free,一般在程序的onDestroy里。

 

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

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

(0)
上一篇 2026年3月18日 下午12:28
下一篇 2026年3月18日 下午12:29


相关推荐

  • Oracle 11g Rac搭建「建议收藏」

    Oracle 11g Rac搭建「建议收藏」Oracle11gRac搭建(RedHat6.9+Oracle11.2.0.4)系统安装规划网络规划用户组规划存储规划配置yum源,网络规划,hosts文件等(双节点执行)如果是64bit,需要检查以下的Packages。以下重复包名称的部分是64bit,注明32bit的是32bitpackages。如果是32bitOS,那么重复包名的只需要32…

    2026年4月13日
    4
  • python可以自动回收垃圾吗_python多线程实现

    python可以自动回收垃圾吗_python多线程实现前言现在的高级语言如java,c#等,都采用了垃圾回收机制,而不再像c,c++里,需要用户自己管理内存。自己管理内存及其自由,可以任意申请内存,但这如同一把双刃剑,可能会造成内存泄漏,空指针等bug

    2022年7月30日
    21
  • 炒股“小龙虾”来了?3家金融数据终端大厂官宣“养虾”

    炒股“小龙虾”来了?3家金融数据终端大厂官宣“养虾”

    2026年3月14日
    2
  • 电压电流转换检测「建议收藏」

    电压电流转换检测「建议收藏」电流可以转换成电压,电压也可以转换成电流。图十就是这样一个电路。上图的负反馈没有通过电阻直接反馈,而是串联了三极管Q1的发射结,大家可不要以为是一个比较器就是了。只要是放大电路,虚短虚断的规律仍然是符合的!由虚断知,运放输入端没有电流流过,则(Vi–V1)/R2=(V1–V4)/R6……a同理(V3–V2)/R5=V2/R4……b由虚短知V1=V2……c如果R2=R6,R4=R5,则…

    2022年6月2日
    40
  • Linux中的pushd和popd

    Linux中的pushd和popd其实,很早就知道pushd和popd在linux中可以用来方便地在多个目录之间切换。那时比较浮躁,感觉切换目录没必要这么复杂。在实际中,发现通过使用pushd和popd能够极大地提高效率。0、使用cd-进行目录切换一般,Shell中都可以通过cd-命令回到之前的目录,下面是一个例子:$pwd/home/lfqy$cd/$cd-/home/lfqy$实际上,cd-中,-就

    2025年7月21日
    5
  • 高盛:腾讯在OpenClaw部署竞争中更可能赢得消费端流量

    高盛:腾讯在OpenClaw部署竞争中更可能赢得消费端流量

    2026年3月14日
    2

发表回复

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

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