临界区 lock锁,多线程下,共享资源的访问策略

29 篇文章 15 订阅 ¥99.00 ¥19.90

 

临界区

多线程中,各个线程都要对共享变量进行操作,比如一个线程对共享变量进行写操作,一个线程对共享变量进行读操作。

这时候就可能会有冲突,比如在写的时候,另一个同时在读。

为解决这个问题,就引入了临界区概念。使用EnterCriticalSection、LeaveCriticalSection 来控制多线程共享变量的访问。

 

WINBASEAPI
VOID
WINAPI

EnterCriticalSection(

    __inout LPCRITICAL_SECTION lpCriticalSection

);

 

临界区保护原理:

CRITICAL_SECTION cs;//定义一个全局临界区变量

InitializeCriticalSection(&cs);//初始化临界区

EnterCriticalSection(&cs);//进入临界区

EnterCritialSection之后,cs里面的信息便被修改了,以指明哪一个线程占用了它。

在这个线程尚未执行LeaveCriticalSection之前,

其它线程碰到EnterCritialSection语句的话,就会处于等待状态,相当于线程被挂起了。

这样就起到了保护共享资源的作用。

所以,我们可以把共享资源的操作都放在EnterCritialSection、LeaveCriticalSection之间,这样就保证了 共享变量的原子性,只能被单个线程操作完毕后,其它线程才能对其进行其它操作。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值