`
javatoyou
  • 浏览: 1083609 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux线程同步之读写锁

 
阅读更多

1. 特性: 一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁 . 正是因为这个特性, 当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞. 当读写锁在读加锁状态时, 所有试图以读模式对它进行加锁的线

1. 特性:

一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁. 正是因为这个特性,

当读写锁是写加锁状态时, 在这个锁被解锁之前, 所有试图对这个锁加锁的线程都会被阻塞.
当读写锁在读加锁状态时, 所有试图以读模式对它进行加锁的线程都可以得到访问权, 但是如果线程希望以写模式对此锁进行加锁, 它必须阻塞知道所有的线程释放锁.
通常, 当读写锁处于读模式锁住状态时, 如果有另外线程试图以写模式加锁, 读写锁通常会阻塞随后的读模式锁请求, 这样可以避免读模式锁长期占用, 而等待的写模式锁请求长期阻塞.
2. 适用性:

读写锁适合于对数据结构的读次数比写次数多得多的情况. 因为, 读模式锁定时可以共享, 以写模式锁住时意味着独占, 所以读写锁又叫共享-独占锁.

3. 初始化和销毁:

#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, 出错则返回错误编号.

同互斥量以上, 在释放读写锁占用的内存之前, 需要先通过pthread_rwlock_destroy对读写锁进行清理工作, 释放由init分配的资源.

4. 读和写:

#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个函数分别实现获取读锁, 获取写锁和释放锁的操作. 获取锁的两个函数是阻塞操作, 同样, 非阻塞的函数为:

#include <pthread.h>

int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

成功则返回0, 出错则返回错误编号.

非阻塞的获取锁操作, 如果可以获取则返回0, 否则返回错误的EBUSY.

5. 属性设置

#include <pthread.h>
int pthread_rwlockattr_init(pthread_rwlockattr_t *attr);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr); int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *restrict attr, int *restrict pshared);
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr,int pshared);

pthread_rwlockattr_setkind_np (attr, pref)

分享到:
评论

相关推荐

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

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

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

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

    Linux系统编程之线程同步

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

    线程同步与互斥:读写锁示例代码

    Linux系统编程——线程同步与互斥:读写锁,相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/46485735

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

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

    windows和linux读写锁C++实现

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

    linux多线程编程.pdf

    Linux多线程编程是现代操作系统编程的重要组成部分,尤其是在Linux环境下,多线程编程更是成为了高性能应用不可或缺的技术之一。本文档主要涉及Linux多线程编程的一些关键知识点,包括pthread线程库的使用、线程的...

    linux之线程同步一-.zip

    在Linux操作系统中,线程同步是多线程编程中的一个重要概念,它确保了多个线程在访问共享资源时能够有序、正确地执行,避免数据不一致性和竞态条件等问题。本资料包“linux之线程同步一”主要探讨了Linux环境下的...

    Linux系统下的多线程编程入门.pdf

    在Linux系统下进行多线程编程是开发高效并发应用程序的关键技术之一。本文将深入探讨Linux环境中的多线程概念、创建与管理线程的方法、线程同步与通信机制,以及多线程编程中可能遇到的问题和解决策略。 一、多线程...

    linux之线程同步一.doc

    本文旨在深入探讨Linux中线程同步的几种常见方法及其应用场景,包括互斥锁(mutexes)、信号量(semaphores)以及条件变量(condition variables),同时还会简要提及读写锁和自旋锁。 #### 二、互斥锁(Mutexes) ...

    linux下多线程读写socket的简单例子

    本示例主要探讨如何在Linux环境下利用多线程同时进行socket的读写操作,这对于提升程序的并发性能和效率至关重要。对于初学者来说,理解这一概念有助于深入学习网络编程和系统级编程。 首先,我们要了解什么是...

    linux线程同步.pdf

    Linux提供了多种线程同步机制,这些机制可以帮助开发者在多线程环境下实现线程安全的代码。 1. **互斥锁(Mutexes)** - **定义**:互斥锁是最基本的同步机制之一。它用于保护共享资源,确保一次只有一个线程可以...

    Linux多线程编程手册

    线程同步是管理线程间共享资源访问的关键,常用的同步机制包括互斥锁(mutexes)、条件变量、读写锁等。 使用64位体系结构可以为线程提供更大的地址空间,有助于处理大规模数据集和复杂的应用程序。在多线程编程中...

    linux 多线程本科毕业设计

    Linux 多线程技术在通信工程专业毕业设计中的应用 Linux 多线程技术是计算机科学领域中一个非常重要的主题,对于通信工程专业的学生来说,掌握 Linux 多线程技术是非常必要的。本文将讨论 Linux 多线程技术在毕业...

    linux之线程同步的概要介绍与分析

    ### Linux之线程同步的概要介绍与分析 在Linux操作系统中,线程同步是多线程编程中的一个核心概念,其主要目的是确保多个线程在访问共享资源时的正确性和一致性,避免出现数据竞争和竞态条件等问题。为了达到这一...

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

    在Linux系统中,多线程编程是一种常见的提升程序并发性能的技术。它允许一个进程内同时执行多个线程,每个线程都有自己的执行上下文,但共享同一份内存空间。这使得线程间通信更为便捷,同时也增加了编程的复杂性。 ...

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

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

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

    Linux下的多线程编程是操作系统...总的来说,理解并熟练掌握Linux下的多线程编程是提升软件开发效率的关键技能之一,这不仅涉及基本的创建和管理,还包括了如何有效地同步和控制线程,以实现高效、安全的并发程序设计。

    linux线程间同步详细说明

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

Global site tag (gtag.js) - Google Analytics