• Delphi多线程编程--线程同步的方法(事件、互斥、信号、计时器)简介


    更详细的可以参考:http://www.cnblogs.com/xumenger/p/4450659.html

    或者参考之后的博客

     

      四个系统内核对象(事件、互斥、信号、计时器)都是线程同步的手段,从这也能看出处理线程同步的复杂性;不过这还不是全部,Windows Vista开始增加了 Condition variables(条件变量)、Slim Reader-Writer Locks(读写锁)等同步手段.

      不过最简单、最轻便(速度最快)的同步手段还是 CriticalSection(临界区),但是它不属于系统内核对象,当然也没有句柄、没有 TSecurityAttributes 这个安全属性,这也导致它不能跨进程使用,不过写多线程时一般不用跨进程,所以 CriticalSection 应该是最常用的同步手段

     

      我觉得有必要在此刻了解的是:建立系统内核对象时一般都有这个属性(TSecureAttributes)

      在接下来多线程的课题中要使用一些内核对象,不如先盘点一下,到时候碰到这个属性时给个 nil 即可, 不必再费神.

      建立事件

    1
    2
    3
    4
    5
    6
    function CreateEvent(
      lpEventAttributes: PSecurityAttributes; {!}
      bManualReset: BOOL;
      bInitialState: BOOL;
      lpName: PWideChar
    ): THandle; stdcall;

      建立互斥

    1
    2
    3
    4
    5
    function CreateMutex(
      lpMutexAttributes: PSecurityAttributes; {!}
      bInitialOwner: BOOL;
      lpName: PWideChar
    ): THandle; stdcall;

      建立信号

    1
    2
    3
    4
    5
    6
    function CreateSemaphore(
      lpSemaphoreAttributes: PSecurityAttributes; {!}
      lInitialCount: Longint;
      lMaximumCount: Longint;
      lpName: PWideChar
    ): THandle; stdcall;

      建立等待计时器

    1
    2
    3
    4
    5
    function CreateWaitableTimer(
      lpTimerAttributes: PSecurityAttributes; {!}
      bManualReset: BOOL;
      lpTimerName: PWideChar
    ): THandle; stdcall;

      

      上面的四个系统内核对象(事件、互斥、信号、计时器)都是线程同步的手段,从这也能看出处理线程同步的复杂性;不过这还不是全部,Windows Vista开始增加了 Condition variables(条件变量)、Slim Reader-Writer Locks(读写锁)等同步手段.

      不过最简单、最轻便(速度最快)的同步手段还是 CriticalSection(临界区),但是它不属于系统内核对象,当然也没有句柄、没有 TSecurityAttributes 这个安全属性,这也导致它不能跨进程使用,不过写多线程时一般不用跨进程,所以 CriticalSection 应该是最常用的同步手段

  • 相关阅读:
    [总结]FFMPEG视音频编解码零基础学习方法--转
    ffmpeg中swscale 的用法
    FFmpeg解码H264及swscale缩放详解
    C++: std::string 与 Unicode 如何结合?
    SpringBoot-@RequestParam
    SpringBoot --web 应用开发之文件上传
    Java并发编程:线程池的使用
    Executor线程池的最佳线程数量计算
    并发下线程池的最佳数量计算
    根据CPU核心数确定线程池并发线程数
  • 原文地址:https://www.cnblogs.com/approx/p/11852051.html
Copyright © 2020-2023  润新知