win c++下同步

windows下线程同步。

一般来说可以分为两种,用户模式下和内核模式下,而内核模式下可以同步进程间,当然包括了线程间

用户模式下的同步:

1、原子锁:

       Interlocked函数,不用切换用户态和内核态,速度快,当然和volatile 还有有点差距,进行的操作一般是++和---;或者+-一个整数;

2、关键段 critical section

       以原子的方式对一个代码段(资源)进行原子访问,主要是对CRITICAL_SECTION 进行操作,用前Init,用后Delete,主要是EnterCriticalSection和LeaveCriticalSection

       也可以和自旋锁结合使用,InitializeCriticalSectionAndSpinCount,SetCriticalSectionSpinCount。

      如果等待的资源被占用,那么会触发一个内核事件将此线程切换到等待转态,直到有资源了再切换回来。这种方式较原子锁还是耗时了些,为了提高效率就是和spin一起使用,

      进入关键段时候,使用spin(比较耗cpu,所以这个度不好把握需要测试,一般用4000),spin消耗完了后还没等到资源就进入转态切换。

3、读/写锁

      原理是共享资源防止写时候冲突,同一时刻可以让多个线程读,但是只能有一个线程写;

      AcquireSRWLockExclusive、ReleaseSRWLockExclusive

      ACquireSRWLockShared、ReleaseSRWLockShared

内核模式下

1、互斥量  CreateMutex

2、事件   CreateEvent

3、信号量 CreateSemaphore

      其他地方可能有的叫信号灯,信号量的一个特例可以理解为mutex,信号量的资源可以有多个,当减为0的时候就不能进去,即没有资源可以分配,知道其他资源释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值