前言

在Windows上使用读写锁很方便,只需要了解几个非常简单的API即可使用,可能只需要花上数分钟而已,在这点上与Linux无异!

简介

众所周知,多线程不能同时读写某段内存,但可以共享读,在这种场景下正好可以使用读写锁——共享读,互斥读写,互斥写写。在这种场景下读写锁是优于临界区和互斥对象的。

当然Windows提供的读写锁有一定的缺陷

1、不同于Linux,不支持TryLock系列函数,也就是说,调用获取锁的API,如果锁被占用了,那么会阻塞调用线程。

2、不支持递归调用。

注意事项

不存在释放或销毁读写锁的函数,系统会自动执行清理工作。

相关API

//
//定义读写锁
RTL_SRWLOCK rdlock;//初始化读写锁
VOID WINAPI InitializeSRWLock( _Out_ PSRWLOCK SRWLock );
////
//申请读锁
VOID WINAPI AcquireSRWLockShared(_Inout_ PSRWLOCK SRWLock);//释放读锁
VOID WINAPI ReleaseSRWLockShared(_Inout_ PSRWLOCK SRWLock);
////
//申请写锁
VOID WINAPI AcquireSRWLockExclusive(_Inout_ PSRWLOCK SRWLock);

Windows编程——读写锁相关推荐

  1. 【C/C++多线程编程之九】pthread读写锁

    多线程编程之读写锁 Pthread是 POSIX threads 的简称,是POSIX的线程标准. pthread读写锁把对共享资源的访问者分为读者和写者,读者只对共享资源进行读访问,写者只对共享资源 ...

  2. Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)

    本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...

  3. Java Review - 并发编程_读写锁ReentrantReadWriteLock的原理源码剖析

    文章目录 ReentrantLock VS ReentrantReadWriteLock 类图结构 非公平的读写锁实现 写锁的获取与释放 void lock() void lockInterrupti ...

  4. 并发编程中常见的锁机制:乐观锁、悲观锁、CAS、自旋锁、互斥锁、读写锁

    文章目录 乐观锁 VS 悲观锁 悲观锁 乐观锁 CAS CAS机制 ABA问题 CAS的优缺点 互斥锁 VS 自旋锁 互斥锁 自旋锁 对比及应用场景 读写锁 实现方式 读写锁 VS 互斥锁 乐观锁 V ...

  5. Linux系统编程----16(线程同步,互斥量 mutex,互斥锁的相关函数,死锁,读写锁)

    同步概念 所谓同步,即同时起步,协调一致.不同的对象,对"同步"的理解方式略有不同.如,设备同步,是指在两 个设备之间规定一个共同的时间参考:数据库同步,是指让两个或多个数据库内容 ...

  6. 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发

    多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...

  7. Windows平台下的读写锁

    Windows平台下的读写锁 简单介绍Windows平台下的读写锁以及实现. 背景介绍 Windows在Vista 和 Server2008以后才开始提供读写锁API,即SRW系列函数(Initial ...

  8. JUC并发编程第十四篇,StampedLock(邮戳锁)为什么比ReentrantReadWriteLock(读写锁)更快!

    JUC并发编程第十四篇,StampedLock(邮戳锁)为什么比ReentrantReadWriteLock(读写锁)更快! 一.ReentrantReadWriteLock(读写锁) 1.读写锁存在 ...

  9. golang:1.并发编程之互斥锁、读写锁详解

    本文转载自junjie,而后稍作修改. 一.互斥锁 互斥锁是传统的并发程序对共享资源进行访问控制的主要手段.它由标准库代码包sync中的Mutex结构体类型代表.sync.Mutex类型(确切地说,是 ...

最新文章

  1. puppet cert maintain
  2. 用VSCode写python的正确姿势
  3. 负荷计算的时候assert失败_负荷计算的入门基础知识,小白入门必备!
  4. Codeforces 1205C Palindromic Paths (交互题、DP)
  5. JavaScript通过 new FileReader() 获取图片base64 无组件上传图片
  6. android 手势事件 重写,Android实现通过手势控制图片大小缩放的方法
  7. 2020-10-03
  8. error: unrecognized arguments: 不运行_JavaScript函数 arguments
  9. 关于 Android 8.0 gts 的 widevine 类问题 GtsMediaTestCases / GtsExoPlayerTestCases
  10. 物联网技术概论:第2章
  11. MySQL 事务的特性
  12. source 还原数据库
  13. 罗素“杀死了”康托尔
  14. 还在花钱抢票?12306 已屏蔽60款抢票软件!
  15. N-gram模型详解
  16. python之excel编程
  17. 毕业设计——GPU地形高度查询
  18. 显示答案c语言代码编程,c语言编程例题及答案
  19. 【181220】VC++学生考试系统(Access)源代码
  20. Emlog最新文章采集插件

热门文章

  1. 幼儿体能五项技能测试软件,幼儿体能训练项目及评分标准(3.5-6岁)[精制甲类]
  2. 【音频处理】创建环绕声混响
  3. Date的getDay()和getDate()的区别:
  4. 使用虚拟机备份软件备份VMware vSphere虚拟机
  5. 终于搞掂博文自动发送
  6. beeline软件_Beeline
  7. Linux怎么完全删除一个用户
  8. 【sass】Sass教程
  9. history命令和FHS介绍
  10. 解决 java double 减 int 型 产生的精度问题