- 浏览: 477818 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。
1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞;
2. 当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行枷锁的线程将阻塞;
3. 当读写锁在读模式锁状态时,如果有另外线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁请求,这样可以避免读模式锁长期占用,而等待的写模式锁请求长期阻塞;
这种锁适用对数据结构进行读的次数比写的次数多的情况下,因为可以进行读锁共享。
API接口说明:
1) 初始化和销毁
#include <pthread.h> int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr); int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
成功则返回0, 出错则返回错误编号.
2) 读加锁和写加锁
获取锁的两个函数是阻塞操作
#include <pthread.h> int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
成功则返回0, 出错则返回错误编号.
3) 非阻塞获得读锁和写锁
非阻塞的获取锁操作, 如果可以获取则返回0, 否则返回错误的EBUSY.
#include <pthread.h> int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock); int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
成功则返回0, 出错则返回错误编号.
转自:http://www.cnblogs.com/caosiyang/archive/2011/11/25/2262980.html
发表评论
-
windowx 命令
2020-10-23 17:35 253windowx 端口占用 netstat -aon|finds ... -
linux常用命令
2020-04-08 08:21 287zip压缩目录 zip -qr test.zip /usr/t ... -
Linux 是如何实现阻塞进程功能的原理
2019-01-12 11:42 1639Linux 是如何实现阻塞进程功能的原理 linux等 ... -
shell 语法
2017-09-09 10:59 389shell 语法 #!/bin/bash //#!告诉 ... -
Linux 命令使用集
2017-01-06 16:40 388Linux 命令使用集 //====== ... -
select、poll、epoll之间的区别总结
2016-09-06 14:46 1226select、poll、epoll之间的 ... -
IO - 同步,异步,阻塞,非阻塞,AIO
2016-09-06 14:43 648IO - 同步,异步,阻塞,非阻塞 阻塞与非阻塞(进程有没 ... -
日志文件系统
2016-09-06 10:14 522日志文件系统 日志文件系统当然要记录日志,而日志也需要占存储 ... -
Linux的原子操作与同步机制
2016-08-18 08:34 613Linux的原子操作与同步 ...
相关推荐
读写锁rwlock读写锁rwlock
所以,互斥锁实质上是操作系统提供的一把“建议锁”(又称“协同锁”),建议程序中有多线程访问共享资源的时候使用该机制。但,并没有强制限定。 因此,即使有了mutex,如果有线程不按规则来访问数据,依然会造成...
/*使用读写锁实现四个线程读写一段程序的实例,共创建了四个新的线程,其中两个线程用来读取数据,另外两个线程用来写入数据。在任意时刻,如果有一个线程在写数据,将阻塞所有其他线程的任何操作。*/
读写锁的类 及demo 基于网上的类 改写了几处逻辑不合理的地方 :1、新的读锁来了如已有写锁等待 新的读锁进入等待 2、等待的读锁获取到执行权限后 把正等待的所有读锁全部激活
标准库std::mutex, std::condition_variable实现的读写锁,写优先,通过优先级控制防止读线程饿死。在支持c++11不支持C++14的工程使用。
.版本 2 .支持库 spec .........局部变量 rwLock, ReadWriteLock ...' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的...rwLock.ReleaseWriteLock ()
洛克使用方式go get github.com/wangfeiso/rwlock特性说明为确保锁的公平性,用Lua实现了优先级级别FCFS,当多个客户端获取写锁(排它锁)的时候,先到的会先获得锁。快速使用import ("github.com/wangfeiso/rwlock...
Python 提供的多线程模型中并没有提供读写锁,读写锁相对于单纯的互斥锁,适用性更高,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。 通俗点说就是当没有写锁时,就可以加读锁且任意...
Python 提供的多线程模型中并没有提供读写锁,读写锁相对于单纯的互斥锁,适用性更高,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。 通俗点说就是当没有写锁时,就可以加读锁且任意...
资源中有demo和源码,基于RWLock类的改进版,原本读写锁在高频率读数据的时候会导致写线程抢占不到而死锁;本人对此做了改进,修正了锁阀门,经过测试可以放心使用了。 开发环境vs2003以上均可。
posix pthread实现的多线程同步工具源代码,包括两个: 1. barrier 等待所有线程进入同一状态。 2. rwlock 读写锁。 多线程编程>>
RWLock 这是一个windows下的读写锁的实现,有win7原生支持的版本,也有xp的版本
在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量(rw_semaphore)、spinlock、BKL(Big Kernel Lock)、rwlock、brlock(只包含在...
读写锁 应用程序接口 创建 new( maxReaders, ?waitLogTimeout, ?waitLogger) 功能级别 read(func, ?wait) write(func, ?wait) 小鬼水平 // read prepareRead(?wait) releaseRead() // write prepareWrite(?wait) ...
Linux 2.4内核正好细化了多CPU下的内核线程同步机构,对不可并行的指令块用spinlock和rwlock作了细致的表示,该补丁的实现可谓水到渠成。具 体的方法就是在进程的任务结构上增加一个preempt_count变量作为内核抢占锁...
该库包含用于多个读写锁的Java代码:-可扩展读写锁:可读写锁,随执行读锁的线程数量而扩展。 -可扩展RWLockS:与上述类似,但实现方式不同。 -可扩展缩放的RWLock:可扩展的RWLock和JDK 8中提供的StampedLock的混合...
同步原语:各种同步原语进行了深入分析,如互斥锁(Mutex)、读写锁(RwLock)、条件变量(Condvar)、屏障(Barrier)等。 并发集合:如何安全地在多线程环境中使用集合类型,如 Vec、HashMap
前端开源库-rwlockrwlock,节点的读/写锁实现。
opt-rwlock 有效的RWLock支持在不同线程上的锁定和解锁。
2.4内核正好细化了多CPU下的内核线程同步机构,对不可并行的指令块用 spinlock和rwlock作了细致的表示,该补丁的实现可谓水到渠成。具体的方法就是在进程的任务结构上增加一个preempt_count变量作 为内核抢占锁,它...