线程的同步之读写锁rwlock(二)
2017-05-08 23:47
183 查看
1.什么是读写锁?
读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,
相对互斥量只有加锁和不加锁两种状态,读写锁有三种状态:读模式下的加锁,写模式下的加锁,不加锁。
读写锁的使用规则:
● 只要没有写模式下的加锁,任意线程都可以进行读模式下的加锁;
● 只有读写锁处于不加锁状态时,才能进行写模式下的加锁;
pthread_rwlock_init():该函是对pthread_rwlock_t类型的读写锁进行初始化。
pthread_rwlock_destroy ():该函是对pthread_rwlock_t类型的读写锁进行初始化。
![](https://img-blog.csdn.net/20170508234732775)
pthread_rwlock_wrlock():该函数是写加锁
![](https://img-blog.csdn.net/20170508234733793)
pthread_rwlock_rdlock():该函数是对读加锁
![](https://img-blog.csdn.net/20170508234734337)
pthread_rwlock_unlock();该函数是对读加锁,写加锁进行解锁操作。
![](https://img-blog.csdn.net/20170508234734887)
2.程序代码
![](https://img-blog.csdn.net/20170508234736840)
![](https://img-blog.csdn.net/20170508234737588)
结果分析:
当多线程中有读写锁的时候,在读模式加锁的情况下,所有线程都可以共享其资源,若其中有写模式加锁的情况下,若运行到写模式的加锁,必须先运行写模式加锁,在此期间其他的线程不能运行,等对其写模式加锁解锁之后其他的线程才能运行。
读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,
相对互斥量只有加锁和不加锁两种状态,读写锁有三种状态:读模式下的加锁,写模式下的加锁,不加锁。
读写锁的使用规则:
● 只要没有写模式下的加锁,任意线程都可以进行读模式下的加锁;
● 只有读写锁处于不加锁状态时,才能进行写模式下的加锁;
pthread_rwlock_init():该函是对pthread_rwlock_t类型的读写锁进行初始化。
pthread_rwlock_destroy ():该函是对pthread_rwlock_t类型的读写锁进行初始化。
pthread_rwlock_wrlock():该函数是写加锁
pthread_rwlock_rdlock():该函数是对读加锁
pthread_rwlock_unlock();该函数是对读加锁,写加锁进行解锁操作。
2.程序代码
结果分析:
当多线程中有读写锁的时候,在读模式加锁的情况下,所有线程都可以共享其资源,若其中有写模式加锁的情况下,若运行到写模式的加锁,必须先运行写模式加锁,在此期间其他的线程不能运行,等对其写模式加锁解锁之后其他的线程才能运行。
相关文章推荐
- 线程的同步和通讯
- 疯狂java学习笔记1023---线程的同步
- Java线程:线程的同步-同步方法
- Linux下线程的同步(转)
- JAVA线程同步中wait()和notify()简洁例子
- 详解Java同步―线程锁和条件对象
- Java线程同步详解
- java多线程,java线程同步
- java 线程数据同步
- c# 任务、线程与同步
- jdbc操作 数据库同步,全量,加入线程,批处理
- 深入Phtread(三):线程的同步-Condition Variables
- 关于linux内核中多进程(线程)间同步和互斥
- 线程的创建,取消,同步与回收
- 进程间通信和线程间同步区别
- 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别
- [多线程]线程基础(对象锁、class锁、同步、异步)
- 第 4章 线程管理:ACE 的同步和线程管理机制
- java线程同步的各种方法
- 线程的同步处理1