windows C/C++ 线程安全(三)(互斥+同步)

承接上一篇:https://blog.youkuaiyun.com/uVarAndMethod/article/details/90364461 

互斥:																			
    当多个线程访问同一个全局变量,或者同一个资源(比如打印机)的时候,需要进行线程间的互斥操作										
来保证访问的安全性.										
										
    临界区、互斥体、事件和信号量都可以实现线程互斥.但如果仅仅需要实现互斥功能,推荐前两种:										
																		
	初始化			进入互斥区域			离开互斥区域		   	销毁
										
临界区	Initialize-CriticalSection			Enter-CriticalSection			Leave-CriticalSection			DeleteCriticalSection
										
互斥体	CreateMutex			WaitForSingleObject			ReleaseMutex			CloseHandle
																				
两者的区别:																				
1、临界区只能用于进程内的线程互斥,性能较好.																
2、互斥体属于内核对象,可以用于进程间的线程互斥,性能较差.										
3、线程在没有正常退出互斥区而意外终结时,互斥体可以复位,但临界区不行.										
线程同步:															
	    当有多个线程同时执行时,可能需要线程按照一定的顺序执行,比如:线程A负责将要处理的数据读取到内存中,而线程B								
	负责分析这些数据,此时,应该是线程A执行完毕再执行线程B才有意义,这个时候就需要进行线程的同步控制。								
									
	可以用于线程同步控制的对象:事件和信号量																
									
	事件:								
									
	创建		使事件进入触发状态			使事件进入未触发状态			销毁								
	CreateEvent		SetEvent			ResetEvent			CloseHandle
																	
	信号量:								
									
	创建		递减计数			递增计数			销毁									
	CreateSemaphore		WaitForSingleObject			ReleaseSemaphore			CloseHandle
																		
	两者的区别:								
									
	1、都是内核对象,使用完毕后应该关闭句柄.								
									
	2、信号量可以用于相当复杂的线程同步控制.								
									

用信号量+临界区做的一个类似抢红包程序(同步+互斥),该程序主要理解同步+互斥: https://download.youkuaiyun.com/download/uvarandmethod/11189376

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值