delphi 线程互斥

本文介绍了在Delphi中如何使用CreateMutex()函数创建互斥量,以实现线程间的同步和互斥。通过设置不同的参数,如lpMutexAttributes、bInitialOwner和lpName,可以控制互斥对象的创建和所有权。当不再需要互斥对象时,使用CloseHandle()进行关闭。此外,WaitForSingleObject()函数用于线程等待互斥对象的信号状态,ReleaseMutex()则用于释放互斥对象的所有权。文章还提及了WaitForMultipleObjects()和MsgWaitForMultipleObjects()作为更复杂的同步选项。
摘要由CSDN通过智能技术生成
互斥非常类似于临界区,除了两个关键的区别:首先,互斥可用于跨
进程的线程同步。其次,互斥能被赋予一个字符串名字,并且通过引用此
名字创建现有互斥对象的附加句柄。
提示 临界区与事件对象(比如互斥对象)的最大的区别是在性能上。临
界区在没有线程冲突时,要用1 0 ~ 1 5个时间片,而事件对象由于涉及到
系统内核要用400~600个时间片。

可以调用函数CreateMutex()来创建一个互斥量。下面是函数的声明:

function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: LPCWSTR): THandle;

lpMutexAttributes参数为一个指向SecurityAttributes记录的指针。此参数通常设为0,表示默认的
安全属性。
bInitialOwner参数表示创建互斥对象的线程是否要成为此互斥对象的拥有者。当此参数为False时,
表示互斥对象没有拥有者。
lpName参数指定互斥对象的名称。设为nil表示无命名,如果参数不是设为nil,函数会搜索是否有
同名的互斥对象存在。如果有,函数就会返回同名互斥对象的句柄。否则,就新创建一个互斥对象并
返回其句柄。
当使用完互斥对象时,应当调用CloseHandle()来关闭它.

例:

unit CriticaSection;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Gr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值