createmutex函数参数含义_pthread_create函数

createmutex函数参数含义_pthread_create函数CreateMutexCreateMutex函数的作用是找出当前系统是否已经存在指定进程的实例,如果没有则创建一个互斥体。//VC声明HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,//指向安全属性的指针BOOLbInitialOwner,//初始化互斥对象的所有者LPCTSTRlpName//指向互斥对象名的指针);一个应用:HANDLEhMutex;hMutex=CreateMutex(

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

CreateMutex

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

//VC声明
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全属性的指针
BOOLbInitialOwner, // 初始化互斥对象的所有者
LPCTSTRlpName // 指向互斥对象名的指针
);

一个应用:

HANDLE hMutex;
hMutex = CreateMutex(NULL ,FALSE ,"myMutex");

::WaitForSingleObject(hMutex, INFINITE); // 1 
::WaitForSingleObject(hMutex, INFINITE); // 2

好多初学者认为,设置为FALSE就是没有获得信号,其实这是错误的理解。

正确的理解是:CreateMutex()函数的第二个参数是FALSE,表示刚刚创建的这个Mutex不属于一任何线程,也就是没有任何线程拥有这个Mutex,一个Mutex在没有任何线程拥有它的时候是出于激发状态的,所以以上这段代码中的Mutex是出于激发状态的,也就是有信号状态。

WaitForSingleObject

函数原型为:
DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);

hHandle为要监视的对象(一般为同步对象,也可以是线程)的句柄; 
dwMilliseconds为hHandle对象所设置的超时值,单位为毫秒; 
  当在某一线程中调用该函数时,线程暂时挂起,系统监视hHandle所指向的对象的状态。如果在挂起的dwMilliseconds毫秒内,线程所等待的对象变为有信号状态,则该函数立即返回;如果超时时间已经到达dwMilliseconds毫秒,但hHandle所指向的对象还没有变成有信号状态,函数照样返回。参数dwMilliseconds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止。

所以第一个::WaitForSingleObject()函数便返回,释放了该线程对Mutex的拥有权,Mutex又会变成激发态,这样就导致了第二个::WaitForSingleObject()函数的返回!

CreateEvent 与 CreateMutex

mutex是互斥量, event就是用来事件通知的。

因为mutex里面的ReleaseMutex是将设置为没有线程拥有它,有信号;而event里面的resetevent是将设置为无信号。

mutex是互斥量, 一般用在程序只允许系统里面有一个instance的时候,程序一启动就检测这个mutex, 如果有说明该程序已经在运行, 就退出. 否则own这个mutex并继续运行程序
event一般用在通知, 比如一个事情做完了通知另一个线程, 这里的另一个线程一般是在wait这个event
mutex是保护临界区的, 当然你非要拿它等待 事件, 也可以, 但语义不同

就是进程的一个实例. 比如记事本(假设), 第一个记事本启动的时候,mutex没有被创建, 所以第一个记事本程序创建并拥有该mutex, 然后显示UI.然后第二个记事本启动的时候, 发现mutex已经存在, 说明已经有记事本在运行了,那么第二个记事本直接退出.  这样保证系统里只有一个instance

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 酒店管理系统程序设计[通俗易懂]

    酒店管理系统程序设计[通俗易懂]酒店管理系统程序设计随着计算机技术的飞速发展,信息时代的到来,信息改变了我们这个社会。各类行业在日常经营管理各个方面也在悄悄地走向规范化和网络化。市场经济的发展,消费者消费意识的提高,酒店行业的竞争越来越激烈。为了提高办事效率,增加、保证酒店的销售额,树立酒店的良好形象,运用科学的管理方法非常必要。客房管理的信息化程度体现在将计算机及网络与信息技术应用于经营与管理,以现代化工具代替传统手工作业。无疑,使用网络信息化管理使客房管理更先进、更高效、更科学,信息交流更迅速。我力求开发一个界面友好,功能强大,使

    2022年9月2日
    7
  • dropna(subset)_python中的head函数

    dropna(subset)_python中的head函数”””ReturnobjectwithlabelsongivenaxisomittedwherealternatelyanyorallofthedataaremissingParameters———-axis:{0or‘index‘,1or‘columns‘},ortuple/listthereofPasstupleorlist…

    2022年9月18日
    3
  • MySQL按字符串hash分区_mysql分区理论「建议收藏」

    MySQL按字符串hash分区_mysql分区理论「建议收藏」查看mysql安装的引擎mysql>showengines;查看mysql安装的插件(这里用于查看当前mysql是否支持partition)mysql>showplugins;不同分区对比分区类型优点缺点共性Range适合与日期类型,支持复合分区有限的分区一般只针对某一列List适合与有固定取值的列,支持复合分区有限的分区,插入记录在这…

    2022年5月4日
    273
  • 实例方法,类方法和静态方法的区别_python中类的所有实例方法

    实例方法,类方法和静态方法的区别_python中类的所有实例方法实例方法第一个参数是"self",表示实例对象,通过它传递实例的属性和方法。只能由实例调用类方法使用装饰器@classmethod,第一个参数可以是"cls&quo

    2022年8月2日
    7
  • shmget物理内存_共享内存的常用函数详解shmget shmat

    shmget物理内存_共享内存的常用函数详解shmget shmat共享内存区域是被多个进程共享的一部分物理内存 如果多个进程都把该内存区域映射到自己的虚拟地址空间 则这些进程就都可以直接访问该共享内存区域 从而可以通过该区域进行通信 共享内存是进程间共享数据的一种最快的方法 一个进程向共享内存区域写入了数据 共享这个内存区域的所有进程就可以立刻看到其中的内容 这块共享虚拟内存的页面 出现在每一个共享该页面的进程的页表中 但是它不需要在所有进程的虚拟内存中都有相同

    2025年9月23日
    2
  • ant-design-pro Login 组件 实现 rules 验证「建议收藏」

    ant-design-pro Login 组件 实现 rules 验证「建议收藏」ant-design-pro Login 组件 实现 rules 验证

    2022年4月20日
    207

发表回复

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

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