`
huangyongxing310
  • 浏览: 477818 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Linux线程同步 读写锁 rwlock

阅读更多

读写锁比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
分享到:
评论

相关推荐

    读写锁rwlock读写锁rwlock

    读写锁rwlock读写锁rwlock

    Linux系统编程之线程同步

    所以,互斥锁实质上是操作系统提供的一把“建议锁”(又称“协同锁”),建议程序中有多线程访问共享资源的时候使用该机制。但,并没有强制限定。 因此,即使有了mutex,如果有线程不按规则来访问数据,依然会造成...

    linux 读写锁应用实例

    /*使用读写锁实现四个线程读写一段程序的实例,共创建了四个新的线程,其中两个线程用来读取数据,另外两个线程用来写入数据。在任意时刻,如果有一个线程在写数据,将阻塞所有其他线程的任何操作。*/

    windows 读写锁 (基于关键区的读写锁类 及自动锁)

    读写锁的类 及demo 基于网上的类 改写了几处逻辑不合理的地方 :1、新的读锁来了如已有写锁等待 新的读锁进入等待 2、等待的读锁获取到执行权限后 把正等待的所有读锁全部激活

    写优先防止读线程饿死的读写锁

    标准库std::mutex, std::condition_variable实现的读写锁,写优先,通过优先级控制防止读线程饿死。在支持c++11不支持C++14的工程使用。

    e语言-易语言线程安全之原子锁与读写锁

    .版本 2 .支持库 spec .........局部变量 rwLock, ReadWriteLock ...' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的...rwLock.ReleaseWriteLock ()

    rwlock:基于Redis和Lua的分布式读写锁,使用逻辑接近go的sync.RWMutex

    洛克使用方式go get github.com/wangfeiso/rwlock特性说明为确保锁的公平性,用Lua实现了优先级级别FCFS,当多个客户端获取写锁(排它锁)的时候,先到的会先获得锁。快速使用import ("github.com/wangfeiso/rwlock...

    用Python实现读写锁的示例代码

    Python 提供的多线程模型中并没有提供读写锁,读写锁相对于单纯的互斥锁,适用性更高,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。 通俗点说就是当没有写锁时,就可以加读锁且任意...

    Python读写锁实现实现代码解析

    Python 提供的多线程模型中并没有提供读写锁,读写锁相对于单纯的互斥锁,适用性更高,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。 通俗点说就是当没有写锁时,就可以加读锁且任意...

    读写锁 改进版

    资源中有demo和源码,基于RWLock类的改进版,原本读写锁在高频率读数据的时候会导致写线程抢占不到而死锁;本人对此做了改进,修正了锁阀门,经过测试可以放心使用了。 开发环境vs2003以上均可。

    posix pthread tools: barrie and rwlock

    posix pthread实现的多线程同步工具源代码,包括两个: 1. barrier 等待所有线程进入同一状态。 2. rwlock 读写锁。 多线程编程&gt;&gt;

    RWLock:这是一个windows下的读写锁的实现,有win7原生支持的版本,也有xp的版本

    RWLock 这是一个windows下的读写锁的实现,有win7原生支持的版本,也有xp的版本

    Linux内核的同步机制

     在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量(rw_semaphore)、spinlock、BKL(Big Kernel Lock)、rwlock、brlock(只包含在...

    rwlock:Haxe 的读写锁

    读写锁 应用程序接口 创建 new( maxReaders, ?waitLogTimeout, ?waitLogger) 功能级别 read(func, ?wait) write(func, ?wait) 小鬼水平 // read prepareRead(?wait) releaseRead() // write prepareWrite(?wait) ...

    Linux系统内核抢占补丁的原理

    Linux 2.4内核正好细化了多CPU下的内核线程同步机构,对不可并行的指令块用spinlock和rwlock作了细致的表示,该补丁的实现可谓水到渠成。具 体的方法就是在进程的任务结构上增加一个preempt_count变量作为内核抢占锁...

    Concurrency Freaks:具有可扩展(且快速)读写锁的库-开源

    该库包含用于多个读写锁的Java代码:-可扩展读写锁:可读写锁,随执行读锁的线程数量而扩展。 -可扩展RWLockS:与上述类似,但实现方式不同。 -可扩展缩放的RWLock:可扩展的RWLock和JDK 8中提供的StampedLock的混合...

    《深入理解 Rust 并发编程》

    同步原语:各种同步原语进行了深入分析,如互斥锁(Mutex)、读写锁(RwLock)、条件变量(Condvar)、屏障(Barrier)等。 并发集合:如何安全地在多线程环境中使用集合类型,如 Vec、HashMap

    前端开源库-rwlock

    前端开源库-rwlockrwlock,节点的读/写锁实现。

    opt-rwlock:有效的RWLock支持在不同线程上的锁定和解锁

    opt-rwlock 有效的RWLock支持在不同线程上的锁定和解锁。

    Linux操作系统内核抢占补丁的基本原理

    2.4内核正好细化了多CPU下的内核线程同步机构,对不可并行的指令块用 spinlock和rwlock作了细致的表示,该补丁的实现可谓水到渠成。具体的方法就是在进程的任务结构上增加一个preempt_count变量作 为内核抢占锁,它...

Global site tag (gtag.js) - Google Analytics