轻量级 读写锁(SRW)
看了 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)相关推荐
- Java中的锁机制 -- 乐观锁、悲观锁、自旋锁、可重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥锁、同步锁、死锁、锁粗化、锁消除
文章目录 1. Java中的锁机制 1.1 乐观锁 1.2 悲观锁 1.3 自旋锁 1.4 可重入锁(递归锁) 1.5 读写锁 1.6 公平锁 1.7 非公平锁 1.8 共享锁 1.9 独占锁 1.1 ...
- 并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
文章目录 J.U.C脑图 ReentrantLock概述 ReentrantLock 常用方法 synchronized 和 ReentrantLock的比较 ReentrantLock示例 读写锁R ...
- 线程间同步的几种方法--互斥锁,条件变量,信号量,读写锁
一.互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . 初始化锁 int pthread_mutex_init(pthread_mutex_t *mutex,cons ...
- 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁
浅谈JUC的常用类 JUC就是java.util.concurrent-包下的类 回顾多线程 Java默认有几个线程? 2 个 mian.GC Java 真的可以开启线程吗? 开不了,点击源码得知:本 ...
- 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发
多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...
- Windows平台下的读写锁
Windows平台下的读写锁 简单介绍Windows平台下的读写锁以及实现. 背景介绍 Windows在Vista 和 Server2008以后才开始提供读写锁API,即SRW系列函数(Initial ...
- java dom4j读写锁,java锁的深度化-重入锁,读写锁,乐观锁,悲观锁
1.重入锁 目的:避免死锁的现象 锁作为并发共享数据,保证一致性的工具,在java平台有多种实现synchronized(重量级)和ReentrantLock(轻量级)等等,这些已经写好提供的锁为我们 ...
- Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)
本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...
- JUC-9.“锁”事(显式锁与隐式锁/悲观锁与乐观锁/公平锁与非公平锁/可重入锁/读写锁(独占/共享/降级)/邮戳锁/死锁)、锁升级
目录 一.悲观锁与乐观锁 1.1 悲观锁 1.2 乐观锁 二.公平锁与非公平锁 2.1 为什么会有公平锁/非公平锁的设计为什么默认非公平? 2.2 如何选择使用哪种锁? 三.可重入锁(又名递归锁) 3 ...
最新文章
- 【建站系列教程】3、建站基本技术介绍
- Perceptron Algorithm 感知器算法及其实现
- Java JIT在运行JDK代码时是否作弊?
- 识别MNIST数据集:用Python实现神经网络
- 《终身成长》读书笔记(part8)--努力的过程并不只包含努力本身
- Python学习笔记(序列和元组)
- 5行Python 代码就能让你的电脑永不息屏
- DBA 14条职业选择路线,你适合哪种?
- 复旦的NLP——fudanNLP
- Subsonic简单的语法整理
- 那些APP活动中的刷量与作弊
- java emf 转jpg_java – emf到jpg的转换
- 积分商城系统业务逻辑思维导图_怎么开发积分商城系统_OctShop
- 再谈招聘的面试问题之学习能力判断
- HTML canvas系列-画圆(4)
- 普通用户不能登录linux图形界面,只有root用户可以登录到图形界面
- Verizon将基于从英特尔收购的技术打造新款机顶盒
- A Survey for Image Quality Assessment(综述)
- 移植wifi无线网卡到arm linux上全过程
- 在棋盘上放米粒php,棋盘上的米粒(Python)