线程的同步控制
来源:互联网 发布:西蒙弗雷泽大学 知乎 编辑:程序博客网 时间:2024/05/18 02:52
怎样去在线程间做同步控制 synchronization 呢? 有好几种方法,列举如此
1,Critical Section
windows 中最容易的同步机制,你需要声明一个 CRITICAL_SECTION 型别的变量,由这个变量扮演红绿灯的角色
void initializeCriticalSection(LPCRITICAL_SECTION lpCritical_Section)
void deleteCriticalSection(LPCRITICAL_SECTION lpCritical_Section)
void EnterCriticalSection(LPCRITICAL_SECTION lpCritical_Section)
void LeaveCriticalSection(LPCRITICAL_SECTION lpCritical_Section)
critical_section 的缺点很明显,无法获知其状态,因为它不是核心对象
同时可能会有死锁的情况发生
2,Mutexes 互斥锁
互斥锁 是核心对象,其操作方法与 critical section颇为类似,出了 mutex 的操作时间是 critical section 的百倍之多,只因互斥锁是核心对象
互斥锁 有激发状态和非激发状态,互斥锁为激发状态,仅仅在 没有线程也有本互斥锁,并且有waitForSingleObject()函数正在执行的短暂瞬间,而后又马上置为非激发状态。
只能够被拥有的线程释放
3,semaphore 信号量
是 互斥锁 的扩展形式,为核心对象,没有专属的拥有者
要想理解信号量,那就想想租车的场景吧(见《win32多线程程序设计》116页)
4,Event 事件
想必你已经接触过吧,没有?windows中的每次鼠标单机等操作都是事件,都会引起 event的变化
想想吧,event 有激发态和非激发态,可以指定为自动恢复或是手动恢复
正如 CreatEvent(...) 所讲。注意在自动恢复的状态下 事件 的激发态有可能遗失
5,interlock variables
允许对4字节的数值做最基本的同步操作,不需要动用 critical section 或者 mutexes
- 线程的同步控制
- 线程的同步控制
- 线程间的同步控制
- 线程的控制与同步
- 使用EventWaitHandle控制线程间的同步
- 线程同步互斥的控制方法
- 线程同步互斥的控制方法
- 线程同步互斥的控制方法
- 线程同步互斥的控制方法
- 线程同步互斥的控制方法
- 线程同步互斥的控制方法
- 线程的(同步synchronized)控制
- 线程同步互斥的控制方法
- 线程同步控制的几种方式
- 线程同步互斥的控制方法
- 线程同步控制
- ruby线程同步控制
- 线程间同步控制
- Tomcat 6 JNDI配置及测试
- Space-Optimized Texture Maps
- 必须掌握的八个DOS命令
- 使用Netsh命令修改Windows系统的ip、网关及DNS
- 编辑器字符集的理解
- 线程的同步控制
- 算法复习之------树状数组
- 二次开发
- 二十个你必须知道的SEO概念
- How to move ASM database files from one diskgroup to another
- 流量控制与拥塞控制
- 上传文件
- 全国每年的考证时间大全
- 16. android dialog ——列表项带图标的列表对话框、模拟菜单项带图标