`
huangyongxing310
  • 浏览: 483697 次
  • 性别: 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
分享到:
评论

相关推荐

    线程间同步机制 读写锁通信机制 线程与信号

    在Linux高级程序设计中,主要介绍了三种线程同步机制:互斥锁、条件变量和读写锁,以及线程与信号的交互。 1. **互斥锁通信机制**: 互斥锁是用于保护临界区的一种机制,确保同一时间只有一个线程能访问共享资源。...

    linux上实现多进程和多线程实现同步互斥(源代码)

    在Linux操作系统中,多进程和多线程是两种并发执行的方式,它们在处理并发问题时,经常需要进行同步和互斥操作,以确保数据的一致性和程序的正确性。本篇将详细介绍这两种并发模型以及如何在Linux环境中实现同步互斥...

    windows和linux读写锁C++实现

    在多线程编程中,读写锁是一种非常重要的同步机制,它允许多个读线程同时访问共享资源,但只允许一个写线程独占资源,从而提高了并发性能。本话题将详细探讨在Windows和Linux环境下,如何使用C++来实现读写锁。 ...

    linux下实现高性能读写锁(read/write lock)

    在Linux系统中,读写锁(Read/Write Locks,简称rwlocks)是一种多线程同步机制,它允许多个线程同时进行读操作,但只允许一个线程执行写操作。这种锁的设计目的是提高并发性能,特别是当读操作远多于写操作时。在...

    Linux系统编程之线程同步

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

    Linux多线程Linux多线程

    在Linux系统中,多线程是一种程序执行方式,它允许单个进程内同时运行多个并发执行的线程。这种技术可以提升程序的并发性,优化系统资源利用率,并提高整体性能。下面将详细介绍Linux多线程的相关知识点。 1. **...

    Linux多线程编程_linux多线程_Linux多线程;应用笔记_columnc9g_

    - **读写锁(Read-Write Locks)**:`pthread_rwlock_init()`, `pthread_rwlock_rdlock()`, `pthread_rwlock_wrlock()`, `pthread_rwlock_unlock()`提供读多写一的并发访问模式。 - **信号量(Semaphores)**:...

    linux线程间同步详细说明

    在Linux操作系统中,线程间同步是多线程编程中的一个重要概念,用于确保多个线程在访问共享资源时能够有序进行,避免数据竞争和不一致性。本文将详细讲解Linux线程间同步的各种机制和实现方法。 一、互斥量(Mutex...

    linuxduoxiancheng.rar_Linux下 线程_linux 多线程_linux多线程

    Linux下的多线程编程是操作系统课程中的重要组成部分,它涉及到如何在Linux环境下创建、管理和同步多个执行线程,以提高程序的并发性和效率。本文将深入探讨Linux多线程的概念、实现方法以及相关的同步机制。 一、...

    标准C写的线程池和读写锁

    "mutex_wrap.h"和"cond_wrap.h"可能封装了互斥量(Mutex)和条件变量(Condition Variable),这是多线程同步的另外两个关键工具。互斥量用于保护临界区,确保同一时间只有一个线程访问;条件变量则用于线程间的通信...

    windows/linux读写锁简单改进版本

    读写锁(Read-Write Lock)是多线程编程中的一种同步机制,它允许多个线程同时读取共享资源,但只允许一个线程写入。这种锁在高并发读取场景下能显著提高系统性能,因为它减少了锁的争用。在Windows和Linux操作系统...

    Linux多线程编程手册

    在Linux系统中,多线程编程是实现并发执行任务的重要技术。`pthread`库是Unix-like操作系统,包括Linux,广泛采用的多线程接口。它提供了丰富的API来创建、同步和管理线程,使得开发者可以充分利用多核处理器的计算...

    linux最全多线程手册pdf

    手册会详细讲解各种同步机制,如互斥锁(mutex)、读写锁(rwlock)、条件变量(condition variable)以及信号量(semaphore)。同时,还会介绍线程间通信的方法,如消息队列、管道和共享内存。 三、线程安全与死锁...

    重大软院操作系统实验三:线程同步

    在Linux中,可以使用pthread_rwlock_t类型的读写锁,通过pthread_rwlock_rdlock(), pthread_rwlock_wrlock(), 和pthread_rwlock_unlock()函数进行操作。 5. **死锁**:在多线程环境中,如果两个或更多的线程互相...

    超多的linux线程编程的书籍

    7. `pthread_rwlock_t` 和 `pthread_rwlock_rdlock() / pthread_rwlock_wrlock() / pthread_rwlock_unlock()`:读写锁,允许多个读线程同时访问,但写线程独占。 除了pthread库,Linux还提供了其他线程相关的系统...

    Linux多线程编程

    常见的Linux线程同步方法包括互斥锁(`pthread_mutex_t`)、信号量(`sem_t`)、条件变量(`pthread_cond_t`)和读写锁(`pthread_rwlock_t`)。 4. **线程通信**:线程间通信(IPC)允许线程交换信息。在Linux中,...

    Linux多线程编程手册,linux多线程编程手册pdf,C,C++源码.zip

    4. **线程同步**:线程同步机制包括互斥锁、条件变量、信号量和读写锁。它们用于控制对共享资源的访问,防止数据竞争。 - **互斥锁**(mutex):使用`pthread_mutex_init()`, `pthread_mutex_lock()`和`pthread_...

    linux windows的跨平台线程,锁,定时器基类

    在Linux中,pthread库提供了多种类型的锁,如互斥锁(`pthread_mutex_t`)用于保护临界区,读写锁(`pthread_rwlock_t`)允许多个读取者同时访问数据但阻止写入。Windows同样有对应的API,如`CreateMutex()`实现互斥...

    linux多线程编程书籍

    3. **线程同步**:为了防止线程间的竞态条件和死锁,Linux提供了多种同步机制,如互斥量(`pthread_mutex_t`)、信号量(`sem_t`)、条件变量(`pthread_cond_t`)和读写锁(`pthread_rwlock_t`)。这些工具用于控制...

    linux多线程编程

    3. **线程同步**:线程间通信和同步包括互斥锁(`pthread_mutex_t`)、条件变量(`pthread_cond_t`)、读写锁(`pthread_rwlock_t`)等。 **三、线程生命周期** 1. **创建**:线程由`pthread_create`函数创建,分配...

Global site tag (gtag.js) - Google Analytics