"临界区"(CriticalSection): 当把一段代码放入一个临界区, 线程执行到临界区时就独占了, 让其他也要执行此代码的线程先等等; 这和前面用的 Lock 和 UnLock 差不多; 使用格式如下:

var CS: TRTLCriticalSection;   {声明一个 TRTLCriticalSection 结构类型变量; 它应该是全局的}
InitializeCriticalSection(CS); {初始化}
EnterCriticalSection(CS);      {开始: 轮到我了其他线程走开}
LeaveCriticalSection(CS);      {结束: 其他线程可以来了}
DeleteCriticalSection(CS);     {删除: 注意不能过早删除}//也可用 TryEnterCriticalSection 替代 EnterCriticalSection.
var
  CS: TRTLCriticalSection;function MyThreadFun(p: Pointer): DWORD; stdcall;
var
  i: Integer;
begin
  EnterCriticalSection(CS);for i := 0 to 99 do Form1.ListBox1.Items.Add(IntToStr(i));LeaveCriticalSection(CS);Result := 0;
end;procedure TForm1.Button1Click(Sender: TObject);
var
  ID: DWORD;
begin
  CreateThread(nil, 0, @MyThreadFun, nil, 0, ID);CreateThread(nil, 0, @MyThreadFun, nil, 0, ID);CreateThread(nil, 0, @MyThreadFun, nil, 0, ID);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1.Align := alLeft;InitializeCriticalSection(CS);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeleteCriticalSection(CS);
end;

Delphi 在 SyncObjs 单元给封装了一个 TCriticalSection 类, 用法差不多

uses SyncObjs;varCS: TCriticalSection;function MyThreadFun(p: Pointer): DWORD; stdcall;
vari: Integer;
beginCS.Enter;for i := 0 to 99 do Form1.ListBox1.Items.Add(IntToStr(i));CS.Leave;Result := 0;
end;procedure TForm1.Button1Click(Sender: TObject);
varID: DWORD;
beginCreateThread(nil, 0, @MyThreadFun, nil, 0, ID);CreateThread(nil, 0, @MyThreadFun, nil, 0, ID);CreateThread(nil, 0, @MyThreadFun, nil, 0, ID);
end;procedure TForm1.FormCreate(Sender: TObject);
beginListBox1.Align := alLeft;CS := TCriticalSection.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
beginCS.Free;
end;

多线程编程(3) - 多线程同步之 CriticalSection(临界区)相关推荐

  1. Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)

    本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...

  2. Win32多线程编程(3) — 线程同步与通信

    一.线程间数据通信 系统从进程的地址空间中分配内存给线程栈使用.新线程与创建它的线程在相同的进程上下文中运行.因此,新线程可以访问进程内核对象的所有句柄.进程中的所有内存以及同一个进程中其他所有线程的 ...

  3. 多线程编程、线程同步|安全和线程通信

    多线程编程 多线程的优势 线程在程序中是独立的.并发的执行流,与分隔的进程相比,进程中的线程之间的隔离程度要小.他们共享内存.文件句柄和其他每个进程应有的状态. 因为线程的划分尺度小于进程,使得多线程 ...

  4. java多线程同步与死锁,廖雪峰Java11多线程编程-2线程同步-3死锁

    在多线程编程中,要执行synchronized块,必须首先获得指定对象的锁. 1.Java的线程锁是可重入的锁 public void add(int m){ synchronized (lock){ ...

  5. 多线程编程 java_java多线程编程

    一.多线程的优缺点 多线程的优点: 1)资源利用率更好 2)程序设计在某些情况下更简单 3)程序响应更快 多线程的代价: 1)设计更复杂 虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般 ...

  6. 多线程编程java_Java多线程编程

    Java给多线程编程提供了内置的支持.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销. ...

  7. python多线程编程_python多线程编程(1): python对多线程的支持

    前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支持. 虚拟机层面 Python虚拟机使用GIL(Global ...

  8. java多线程编程_Java多线程编程实战指南+设计模式篇.pdf

    Java多线程编程实战指南+设计模式篇.pdf 对Java架构技术感兴趣的工程师朋友们可以关注我,转发此文后私信我"Java"获取更多Java编程PDF资料(附送视频精讲) 关注我 ...

  9. java多线程编程_Java多线程编程

    本文主要对Java多线程编程进行深入研究.本文通过查看源代码及参考资料等方式研究.参考文章: Java多线程编程深入详解. 由问题入手: 问题1: 2种创建Thread的方式都是实现run()方法,但 ...

  10. Java多线程编程(2)--多线程编程中的挑战

    一.串行.并发和并行   为了更清楚地解释这三个概念,我们来举一个例子.假设我们有A.B.C三项工作要做,那么我们有以下三种方式来完成这些工作:   第一种方式,先开始做工作A,完成之后再开始做工作B ...

最新文章

  1. java两个线程同时运行_java如何几乎同时结束两个线程
  2. Elastricsearch 索引操作详解(快速入门、索引管理、映射详解、索引别名)
  3. 元素的子元素_从暂元里取出子元素 | Stata编程
  4. Matplotlib实例教程 | 配色表 colors
  5. struts2配置中Action的name 和package的name和namespace作用
  6. Python 入门网络爬虫之精华版
  7. final string 堆区 栈区 java_JVM内存初学 堆、栈、方法区
  8. 自定义评分器Similarity,提高搜索体验(转)
  9. 【Spark】reduceByKey和GroupByKey
  10. finfoopen需要什么扩展 php_php获取文件mime类型的几种方法
  11. “三步走”助你完成领导者转变
  12. Centos7.x 装机优化
  13. kux格式怎么转换成mp3_优酷kux1080转码工具 1080p kux格式转换mp4|优酷kux格式转换成MP4格式...
  14. 安卓脚本判断运作的是不是root,su
  15. 面试云计算工程师岗位经常被问到的40个问题
  16. MAC电脑迁移本机Notes
  17. 禅道怎么启动mysql_禅道启动mysql报错connectByPDO
  18. 离散数学 极大元,极小元,最大元,最小元,上界,上确界,下界,下确界
  19. spm,afni的安装和使用心得
  20. 价值链-名词解释01

热门文章

  1. 热力学第二定律中的悖论 | 集智百科
  2. 一图读懂:中国科学院“基础研究十条”
  3. 40年诞生7位诺奖得主,美国贝尔实验室做对了什么?
  4. 制胜人工智能时代——企业人工智能应用现状分析(第三版)
  5. Hinton口中破解宇宙终极秘密的GPT-3厉害在哪?这有篇涂鸦详解
  6. 生物,AI,心理:目前的大脑/认知/意识/AGI/DRL模型
  7. “机器人迟钝一点,会更有人情味”,迪士尼提出新型人机交互系统
  8. 2018年中国人工智能100强研究报告
  9. 一文看懂机器视觉芯片
  10. 视觉系统的演化之旅——视觉器官、光感受器及视觉分子