win32 semaphore(信号量)
2022/7/30 23:24:10
本文主要是介绍win32 semaphore(信号量),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
线程同步
1.原子锁(原子锁只能对运算符进行操作,可以通过flag简易实现)
产生原因
多个线程对一个数据进行原子操作,就会导致结果丢失。比如 -- 或者 ++
//原子锁函数,在任何一个时间只能有一个线程访问 InterlockedXXX();
2.互斥
产生原因
多线程下面代码或者资源的使用
特点
在同一个时间下面,只能有一个线程具有互斥的特性(独占,排他),互斥句柄被持有的时候表现为无信号 没有被持有表现为有信号[可不可以被持有],WaitForXXX的时候,先等先得到
互斥的使用
互斥句柄式有状态的句柄
HANDLE CreateMutex( //创建成功返回互斥句柄,可以锁定多行代码 LPSECURITY_ATTRIBUTES lpMutexAttributes, //指向安全属性的指针,废弃 BOOL bInitialOwner, //标志初始所有权 LPCTSTR lpName //指向mutex对象名称的指针 ); //释放互斥句柄 BOOL ReleaseMutex(HANDLE hMutex); //关闭互斥句柄 CloseHandle();
互斥句柄的理解
也是相当于一把锁,拿着的时候,锁上来做事情,同样在等待锁(互斥句柄)的线程就得等待
//实例前面两个都是资源的抢占(都是加锁实现的)
3.事件(句柄为可等候句柄[事件的句柄可以有多个])
解决线程之间的协调工作
HANDLE CreateEvent( //程序员自己控制是否有信号 LPSECURITY_ATTRIBUTES lpEventAttributes, //指向安全属性的指针 BOOL bManualReset, //手动重置事件的标志。TRUE表示手动设置,FALSE:自动[表示的是在等待Event有信号之后操作系统给我们设置为无信号] BOOL bInitialState, //事件为初始状态 TRUE:有信号 LPCTSTR lpName //事件命名 );
4.信号量(作用类似于事件)信号量句柄是可等候句柄[有信号就通过,没信号就不能通过]
HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //指向安全属性的指针 LONG lInitialCount, //初始计数值,然后等一次,然后 -- 知道0的时候就阻塞在WaitFor ,该值为0的时候表示无信号 LONG lMaximumCount, //最大计数值Max LPCTSTR lpName //指向信号量对象名称的指针 ) BOOL ReleaseSemaphore( HANDLE hSemaphore, // LONG lReleaseCount, //倒计数字 LPLONG lpPreviousCount //可以为NULL,用来存储修改前的信号量的数量 )
//代码演示
这篇关于win32 semaphore(信号量)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?