线程同步方法及注意事项vc++

本文详细介绍了线程同步中的三种主要方法:利用互斥锁(mutex)、事件对象以及临界区(关键代码段)。对比了这些同步手段的特点,如互斥锁和事件对象适用于跨进程线程同步,而临界区则提供了更快的同步速度但容易导致死锁。

一,利用互斥mutex进行线程间同步。

 

二,利用事件线程间同步
1人工重置的事件对象
当它变为有信号状态的时候,所有的线程都可以运行
在一个线程得到该事件状态后不会将改时间设置为非信号状态,除非人工设置ResetEvent()
函数


2自动重置的事件对象
当它变为有信号状态的时候,所有等待该事件的线程只能有一个变为可调度的线程去运行。
调用WaitForSingleObject()后同时操作系统会将其在设置为非信号状态
所以要在对所保护代码执行完毕以后在调用SetEvent()函数将事件设置为信号状态,以便
其他进程进行访问。


三,临界区(关键代码段)

 

 

 

互斥对象,事件对象与关键代码段的比较
互斥对象和事件对象属于内核对象,利用内核对象进行线程同步,速度比较慢,
但利用互斥兑现和事件对象这样的内核对象,可以在多个进程的各个线程间进行通信

 


关键代码段是工作在用户方式下的,同步速度较快,但是在使用关键代码段的时候,
很容易进入死锁,因为在等待进入关键代码段时死锁无法设置超时值。

 

 

 

 

 

 

 

 

 


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值