CRITICAL_SECTION描述及用法

参考链接

  1. CRITICAL_SECTION是每个线程中访问临界资源的定义,它存在于“minwinbase.h”中,临界资源为每次只允许一个线程使用的共享资源,无论硬件或软件临界资源,多个线程必须互斥对其进行访问。
  2. 线程进入临界区的调度原则:多线程要求进入空闲的临界区,一次只允许一个线程进入,其他未进入线程等待;进入临界区的线程需在有限时间内退出以便其他未进入的线程可进入自己的临界区;若线程不能进入自己的临界区应让出cpu避免出现“忙等”现象。
  3. 临界区使用时以CRITICAL_SECTION结构对象保护共享资源,用EnterCriticalSection()标识一个临界区,用LeaveCriticalSection释放一个临界区。
  4. CRITICAL_SECTION结构对象必须经过IntializeCriticalSection()初始化,且要确保所有线程中任何试图访问共享资源的代码都处于此临界区保护之下。保护共享资源在于当一个线程执行了EnterCriticalSection后,临界区结构对象cs里面的信息已被更改以指明哪个线程已占用,EnterCriticalSection()只给线程加锁而非给资源加锁,所以此时其它线程也可访问当前共享资源,但会访问错误,因为已有线程占用。当前占用资源的线程未执行LeaveCriticalSection()前,其他线程碰到EnterCriticalSection()时都会处于等待状态直到当前占用资源线程离开临界区。
    5.比如创建多个共享资源:
CRITICAL_SECTION m_PoolCriticalSection[8];
ZeroMemory(&m_PoolCriticalSection,sizeof(CRITICAL_SECTION )*8);//内存清0
IniticalizeCriticalSection(&m_PoolCriticalSection[i]);//0-7为i的赋值数,创建缓存
/*删除缓存:DeleteCriticalSection(&m_PoolCriticalSection[i])*/
EnterCriticalSection(&m_PoolCriticalSection[i]);
//处理数据的代码
LeaveCriticalSection(&m_PoolCriticalSection[i]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值