看了 MoreWindows 的Blog, 自己实践了下, 写写总结, 记录下。并在此谢谢那些无私的大牛们  Orz

====================================================================================================================================

最近都在看线程同步、互斥相关内容, 今天写的是 轻量级 读写锁(SRW)

SRW 的特点->MSDN 地址  http://msdn.microsoft.com/en-us/library/aa904937(v=vs.85).aspx

直接戳函数名到 MSDN 去看原型 - -.

AcquireSRWLockExclusive

Acquires an SRW lock in exclusive mode. 获取独占模式的SRW锁(阻塞)

AcquireSRWLockShared

Acquires an SRW lock in shared mode. 获取共享模式的SRW锁(阻塞)

InitializeSRWLock

Initialize an SRW lock.. 初始化

ReleaseSRWLockExclusive

Releases an SRW lock that was opened in exclusive mode.

释放独占模式打开了一个SRW锁

ReleaseSRWLockShared

Releases an SRW lock that was opened in shared mode.

释放共享模式打开了一个SRW锁

SleepConditionVariableSRW

Sleeps on the specified condition variable and releases the specified lock as an atomic operation.

TryAcquireSRWLockExclusive

Attempts to acquire a slim reader/writer (SRW) lock in exclusive mode.

If the call is successful, the calling thread takes ownership of the lock.

获取独占模式的SRW锁(非阻塞)成功/失败非零/零

TryAcquireSRWLockShared

Attempts to acquire a slim reader/writer (SRW) lock in shared mode.

If the call is successful, the calling thread takes ownership of the lock.

获取共享模式的SRW锁(非阻塞)成功/失败非零/零

所以SRW的特点就是:所有读线程可以并发的执行(获得共享锁),而一旦写线程获得执行(获得独占锁)其他读、写线程全部都无法获得锁(共享锁、独占锁)。

注意点:

         1.程序在codeblocks下无法编译,VS2008通过,系统windows 7 32bit

         2. MoreWindows 在他的blog中提到系统要求在 Vista 或 Windows Server2008之上

下面是我的测试程序和说明:

#include <iostream>
#include <windows.h>
#include <process.h>
#include <time.h>using namespace std;SRWLOCK RW_lock;
int couter = 0;unsigned int __stdcall func_1(void*)
{while (1){AcquireSRWLockExclusive(&RW_lock);cout << "Write thread func_1 is running .. " << endl;cout << couter ++ << endl;Sleep(2000);cout << "Write thread func_1 has exited .. " << endl;ReleaseSRWLockExclusive(&RW_lock);Sleep(1000);}return 0;
}unsigned int __stdcall func_2(void*)
{while (1){AcquireSRWLockExclusive(&RW_lock);cout << "   Write thread func_2 is running .. " << endl;cout << "   " << couter ++ << endl;Sleep(1000);cout << "   Write thread func_2 has exited .. " << endl;ReleaseSRWLockExclusive(&RW_lock);Sleep(2000);}return 0;
}/// In the thread, if read operation is to acquire the lock, and don't read operation outside of the things.
unsigned int __stdcall func_3(void*){while (1){AcquireSRWLockShared(&RW_lock);cout << "Read thread func_3 is running .. " << endl;cout << couter << endl;Sleep(3000);cout << "Read thread func_3 has exited .. " << endl;ReleaseSRWLockShared(&RW_lock);Sleep(4000);}return 0;
}unsigned int __stdcall func_4(void*)
{while (1){AcquireSRWLockShared(&RW_lock);cout << "   Read thread func_4 is running .. " << endl;cout << "   " << couter << endl;Sleep(3000);cout << "   Read thread func_4 has exited .. " << endl;ReleaseSRWLockShared(&RW_lock);Sleep(4000);}
}int main()
{InitializeSRWLock(&RW_lock);HANDLE pid[5];pid[0] = (HANDLE)_beginthreadex(NULL, 0, func_1, NULL, 0, NULL);pid[1] = (HANDLE)_beginthreadex(NULL, 0, func_2, NULL, 0, NULL);pid[2] = (HANDLE)_beginthreadex(NULL, 0, func_3, NULL, 0, NULL);pid[3] = (HANDLE)_beginthreadex(NULL, 0, func_4, NULL, 0, NULL);WaitForMultipleObjects(4, pid, true, INFINITE);for (int i=0; i<4; i++){CloseHandle(pid[i]);}system("pause");return 0;
}

运行结果与说明:

再次感谢无私的前辈 !!

轻量级 读写锁(SRW)相关推荐

  1. Java中的锁机制 -- 乐观锁、悲观锁、自旋锁、可重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥锁、同步锁、死锁、锁粗化、锁消除

    文章目录 1. Java中的锁机制 1.1 乐观锁 1.2 悲观锁 1.3 自旋锁 1.4 可重入锁(递归锁) 1.5 读写锁 1.6 公平锁 1.7 非公平锁 1.8 共享锁 1.9 独占锁 1.1 ...

  2. 并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition

    文章目录 J.U.C脑图 ReentrantLock概述 ReentrantLock 常用方法 synchronized 和 ReentrantLock的比较 ReentrantLock示例 读写锁R ...

  3. 线程间同步的几种方法--互斥锁,条件变量,信号量,读写锁

    一.互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . 初始化锁 int pthread_mutex_init(pthread_mutex_t *mutex,cons ...

  4. 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁

    浅谈JUC的常用类 JUC就是java.util.concurrent-包下的类 回顾多线程 Java默认有几个线程? 2 个 mian.GC Java 真的可以开启线程吗? 开不了,点击源码得知:本 ...

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

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

  6. Windows平台下的读写锁

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

  7. java dom4j读写锁,java锁的深度化-重入锁,读写锁,乐观锁,悲观锁

    1.重入锁 目的:避免死锁的现象 锁作为并发共享数据,保证一致性的工具,在java平台有多种实现synchronized(重量级)和ReentrantLock(轻量级)等等,这些已经写好提供的锁为我们 ...

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

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

  9. JUC-9.“锁”事(显式锁与隐式锁/悲观锁与乐观锁/公平锁与非公平锁/可重入锁/读写锁(独占/共享/降级)/邮戳锁/死锁)、锁升级

    目录 一.悲观锁与乐观锁 1.1 悲观锁 1.2 乐观锁 二.公平锁与非公平锁 2.1 为什么会有公平锁/非公平锁的设计为什么默认非公平? 2.2 如何选择使用哪种锁? 三.可重入锁(又名递归锁) 3 ...

最新文章

  1. 【建站系列教程】3、建站基本技术介绍
  2. Perceptron Algorithm 感知器算法及其实现
  3. Java JIT在运行JDK代码时是否作弊?
  4. 识别MNIST数据集:用Python实现神经网络
  5. 《终身成长》读书笔记(part8)--努力的过程并不只包含努力本身
  6. Python学习笔记(序列和元组)
  7. 5行Python 代码就能让你的电脑永不息屏
  8. DBA 14条职业选择路线,你适合哪种?
  9. 复旦的NLP——fudanNLP
  10. Subsonic简单的语法整理
  11. 那些APP活动中的刷量与作弊
  12. java emf 转jpg_java – emf到jpg的转换
  13. 积分商城系统业务逻辑思维导图_怎么开发积分商城系统_OctShop
  14. 再谈招聘的面试问题之学习能力判断
  15. HTML canvas系列-画圆(4)
  16. 普通用户不能登录linux图形界面,只有root用户可以登录到图形界面
  17. Verizon将基于从英特尔收购的技术打造新款机顶盒
  18. A Survey for Image Quality Assessment(综述)
  19. 移植wifi无线网卡到arm linux上全过程
  20. 在棋盘上放米粒php,棋盘上的米粒(Python)

热门文章

  1. Final Cut Pro下载附免费资源
  2. fcpx: FCPX Auto Tracker 自动跟踪插件
  3. 文件转码(word、ppt、图片、Excal)
  4. 在安卓中压缩GIF的几种方法(附实例代码)
  5. Linux内核实时监控键盘输入
  6. 数据库配得都对却无法连接或者连接失败
  7. 上传视频加进度条教程
  8. iOS App 设置启动图(LaunchImage)
  9. 7.1 Ansible 动态获取主机清单
  10. 材料学博士转型大数据开发,是一种什么体验?