Win32-进程锁-进程异步-进程互斥-CreateMutex-OpenMutex-WaitForSingleObject-ReleaseMutex

Win32-进程锁-进程异步-进程互斥-CreateMutex-OpenMutex-WaitForSingleObject-ReleaseMutex功能 WaitForSingl 函数用来检测 hHandle 事件的信号状态 在某一线程中调用该函数时 线程暂时挂起 如果在挂起的 dwMillisecon 毫秒内 线程所等待的对象变为有信号状态 则该函数立即返回 参数说明访问互斥资源前应该要调用等待函数 结束访问时就要调用 ReleaseMutex 来表示自己已经结束访问 其它线程可以开始访问了 某一个进程中的线程创建互斥量后 其它进程中的线程就可以通过这个函数来找到这个互斥量 函数访问值成功返回一个表示互斥量的句柄 失败返回 NULL

  如果多个进程对同一个文件进行操作,一定要加锁,否则文件会发生不可以预知的异常,或者结果不可以预测。

1.CreateMutex函数

  功能:作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。

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

2.OpenMutex函数

  功能:作用是为现有的一个已命名互斥体对象创建一个新句柄。

HANDLE OpenMutex( DWORDdwDesiredAccess, // access BOOLbInheritHandle, // inheritance option LPCTSTRlpName // object name ); 

3.WaitForSingleObject函数

  功能:WaitForSingleObject函数用来检测hHandle事件的信号状态,在某一线程中调用该函数时,线程暂时挂起,如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。

DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); 

4.ReleaseMutex函数

  功能:它是一种线性指令,释放线程拥有的互斥体的控制权。

BOOL WINAPI ReleaseMutex( _In_ HANDLE hMutex ); 

  参数说明:访问互斥资源前应该要调用等待函数,结束访问时就要调用ReleaseMutex()来表示自己已经结束访问,其它线程可以开始访问了。

一般互斥使用形式如下:

bool ACopyFileExt(std::string src_filename, std::string dst_filename) { 
     HANDLE mutex; mutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "ACopyFileExt"); if (mutex == NULL) { 
     mutex = CreateMutex(NULL, FALSE, "ACopyFileExt"); } WaitForSingleObject(mutex, INFINITE); //功能区 bool rlt = ACopyFile(src_filename, dst_filename); ReleaseMutex(mutex); return rlt; } 

5.作者答疑

  如有疑问,敬请留言。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219384.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:41
下一篇 2026年3月17日 下午10:41


相关推荐

  • 通达OA 工作流运行异常情况的紧急处理(图文)[通俗易懂]

    通达OA 工作流运行异常情况的紧急处理(图文)[通俗易懂]本文整理自通达OA技术交流群(QQ群号:378591362)群友交流内容。一位朋友的工作流设计和运行突然出现故障,显示的数据部分都不正常,如下图:经过重启所有服务(包括缓存服务)现象依旧。清理了cache下workflow里面的文件,没用后经查找,是前一天把cache下的workflow文件夹清掉了,缓存服务不会自动重建。重新手动建立文件夹后恢复正常。

    2022年6月23日
    60
  • HbuilderX打包app,Hbuilder怎么打包app,H5打包成app,H5怎么打包成app「建议收藏」

    1.下载HbuilderX之后新建项目2.在这里选则你需要新建的项目类型,本人打包的是h5app,选的5+app3.选择好项目本地存放的地址,编写项目名,之后点击创建4.打开刚刚创建的那个项目,点击打开manifest.json,就是下图这样子5.填写你的h5项目地址6.基本配置(看图),太简单太多自己研究7.SDK配置里可以配置你的项目的appid、key其他配置,比如你的项目…

    2022年4月14日
    177
  • 第六章 zookeeper 原理,安装步骤,数据同步演示

    第六章 zookeeper 原理,安装步骤,数据同步演示第六章 zookeeper 原理,安装步骤,数据同步演示

    2022年4月23日
    69
  • Qt5.12配置Android环境 只有platform sdk installed error的解决办法「建议收藏」

    Qt5.12配置Android环境 只有platform sdk installed error的解决办法「建议收藏」QtforAndroid环境配置platformsdkinstallederror的解决方案时隔一年半,又被Qt配置Android环境被这个强大的软件狠狠的按在地上摩擦。都是泪呀!因为项目需要,需要在高一点版本的Qt上面开发Android软件,本来我用Qt5.12.9用的好好的,但是因为配置Android环境要多了个openssl,而且一直就platformsdkinstalled有问题,查了各种方案,在sdkbuild-tools中没有低版本的platform就到各种网站上下载22

    2022年5月18日
    48
  • 魔百盒CM211-2系列(ZG/CH/YS)海思MV300H/310芯片-刷机固件及教程

    魔百盒CM211-2系列(ZG/CH/YS)海思MV300H/310芯片-刷机固件及教程魔百盒CM211-2系列(ZG/CH/YS)海思MV300H/310芯片-刷机固件及教程固件说明:1、魔百盒CM211-2-全系列-海思Hi3798MV300H/310-通用NAND和EMMC卡刷固件,支持红外蓝牙遥控,支持常见多种无线,同时支持RTL8822BS、RTL8822CS、MT7661、MT7663、MT7668等无线;2、解除官方屏蔽无线功能,有线和无线正常使用;3、代工标识说明:一般没标识是朝歌代工,带有ZG字母的就是朝歌代工,带有CH字母的就是长虹代工,带有YS或YST字

    2022年7月24日
    66
  • Perl 正则表达式替换

    Perl 正则表达式替换文本处理中经常需要将字符串中的某些字符替换后再进行处理,以下是新发现的非常方便的方法,充分发挥了Perl正则表达式的威力。$str=”thisisatesting”;$str=~s/(/w+)(/w+)/$2$1/;print$str;————————————OUTPUT:isthisatesti

    2022年5月6日
    122

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号