博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

临界区线程同步

Posted on 2010-11-18 15:15  摸爬滚打的一生  阅读(255)  评论(0)    收藏  举报

四种进程或线程同步互斥的控制方法

1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
2、互斥量:为协调共同对一个共享资源的单独访问而设计的。
3、信号量:为控制一个具有有限数量用户资源而设计。
4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

 

Delphi中用临界区线程同步
多线程程序中,如果各个线程要访问同一个资源,如同一个变量
这时就要使用线程同步技术,才不会使线程之间产生冲突和干扰
线程同步有多种办法,使用临界区是其中最简单,也是效率最高的办法(CPU占用时间最少)
使用临界区代码如下:
先声明一个TRTLCriticalSection类型的全局变量
var
  MyCs: TRTLCriticalSection;
在程序开始或建立线程之前,初始化
  InitializeCriticalSection(MyCs);//初始化临界区
在程序结束或所有线程结束后,删除它
  DeleteCriticalSection(MyCs);//删除临界界
再在线程中要同步的地方加入
    EnterCriticalSection(MyCs); //进入临界区
    try
      //程序代码
    finally
      LeaveCriticalSection(MyCs); //离开临界区
    end;