读写锁SRWLock

SRWLock

读写锁在对资源进行保护的同时,还能区分想要读取资源值的线程(读取者线程)和想要更新资源的线程(写入者线程):

对于读取者线程,读写锁会允许他们并发的执行。
当有写入者线程在占有资源时,读写锁会让其它写入者线程和读取者线程等待。

对于一个读写锁,有两种获取方式:共享(Shared)或独占(Exclusive)。
如果当前读写锁处于空闲状态,那么当多个线程同时以共享方式访问该读写锁时,都可以成功;
而此时如果一个线程以独占的方式访问该读写锁,那么它会等待所有共享访问都结束后才可以成功。在读写锁被独占访问的过程中,再次共享和独占请求访问该锁,都会进行等待状态。

相关函数


//微软定义
typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;
typedef struct _RTL_SRWLOCK {
    PVOID Ptr;
} RTL_SRWLOCK, *PRTL_SRWLOCK;






// 初始化读写锁
WINBASEAPI
VOID
WINAPI
InitializeSRWLock(
    __out PSRWLOCK SRWLock
    );





// 独占式访问
WINBASEAPI
VOID
WINAPI
AcquireSRWLockExclusive(
    __inout PSRWLOCK SRWLock
    );

// 共享式访问
WINBASEAPI
VOID
WINAPI
AcquireSRWLockShared(
    __inout PSRWLOCK SRWLock
    );






// 独占式释放
WINBASEAPI
VOID
WINAPI
ReleaseSRWLockExclusive(
    __inout PSRWLOCK SRWLock
    );

// 共享式释放
WINBASEAPI
VOID
WINAPI
ReleaseSRWLockShared(
    __inout PSRWLOCK SRWLock
    );

代码举例


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值