Windows多线程同步

本文详细介绍了Windows系统中的多线程同步方法,包括CreateMutex、ReleaseMutex、WaitForSingleObject和WaitForMultipleObjects四个关键函数的使用,以及如何在多线程环境下确保资源的安全访问。这些函数在创建、释放互斥体以及等待对象状态变化方面发挥重要作用,有助于避免死锁和资源竞争问题。
摘要由CSDN通过智能技术生成

1、CreateMutex

HANDLE CreateMutex(
    LPSECURITY_ATTRIBUTES   lpMutexAttributes,	// 指向安全属性的指针
    BOOL   bInitialOwner,			// 初始化互斥对象的所有者
    LPCTSTR   lpName				// 指向互斥对象名的指针
);

功能:

        来创建一个有名或无名的互斥量对象。首先找出当前系统是否已经存在指定进程的实例,如果没有则创建一个互斥体。

参数:

lpMutexAttributes :指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值,或者传递NULL),表示使用不允许继承的默认描述符。

bInitialOwner:BOOL类型,如创建进程希望立即拥有互斥体,则设为TRUE,否则,该线程将不获得所创建的互斥对象的所有权。一个互斥体同时只能由一个线程拥有。

lpName:指定互斥体对象的名字。用vbNullString创建一个未命名的互斥体对象。如已经存在拥有这个名字的一个事件,则打开现有的已命名互斥体,如果为NULL,则创建一个匿名的互斥对象。这个名字可能不与现有的事件、信号机、可等待计时器或文件映射相符。

返回值:

        成功,就返回互斥体对象的句柄;失败,返回0,可用GetLastError获取错误值,如果返回的是一个有效句柄,但指定的名字已经存在,GetLastError也会设为ERROR_ALREADY_EXISTS,bInitialOwner的值将会被忽略。如果调用者限制了权限,GetLastError将会返回ERROR_ACCESS_DENIED,这个时候应该使用OpenMutex函数。

注:

        线程中止前,一定要调用ReleaseMutex释放互斥体,如不慎未采取这个措施,就会将这个互斥体标记为废弃(下一个释放的等待函数会返回WAIT_ABANDONED),并自动释放所有权。共享这个互斥体的其他应用程序也许仍然能够用它,但会接收到一个废弃状态信息,指出上一个所有进程未能正常关闭。这种状况是否会造成影响取决于涉及到的具体应用程序。

        在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值