读写锁
来源:互联网 发布:ubuntu和windows区别 编辑:程序博客网 时间:2024/06/06 03:41
读写锁与互斥锁非常相似。r、RW lock有三种状态: 共享读取锁(shared-read), 互斥写入锁(exclusive-write lock), 打开(unlock)。后两种状态与之前的互斥锁两种状态完全相同。
一个unlock的RW lock可以被某个线程获取R锁或者W锁。
如果被一个线程获得R锁,RW lock可以被其它线程继续获得R锁,而不必等待该线程释放R锁。但是,如果此时有其它线程想要获得W锁,它必须等到所有持有共享读取锁的线程释放掉各自的R锁。
如果一个锁被一个线程获得W锁,那么其它线程,无论是想要获取R锁还是W锁,都必须等待该线程释放W锁。
这样,多个线程就可以同时读取共享资源。而具有危险性的写入操作则得到了互斥锁的保护。
我们需要同步并发系统,这为程序员编程带来了难度。但是多线程系统可以很好的解决许多IO瓶颈的问题。比如我们监听网络端口。如果我们只有一个线程,那么我们必须监听,接收请求,处理,回复,再监听。如果我们使用多线程系统,则可以让多个线程监听。当我们的某个线程进行处理的时候,我们还可以有其他的线程继续监听,这样,就大大提高了系统的利用率。在数据越来越大,服务器读写操作越来越多的今天,这具有相当的意义。多线程还可以更有效地利用多CPU的环境。
(就像做饭一样,不断切换去处理不同的菜。)
本文中的程序采用伪C的写法。不同的语言有不同的函数名(比如mutex_lock)。这里关注的是逻辑上的概念,而不是具体的实现和语言规范
0 0
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- 读写锁
- linux下重启weblogic(关闭和启动)
- 快速排序c++
- ubuntu 安装sensors
- LeetCode OJ 之 Partition List (划分链表)
- ORA-01036: illegal variable name/number
- 读写锁
- MFC中UpdateData()函数的作用
- Thread和runnable区别简介
- IOS view的圆角和阴影并存
- if,else if,else的执行
- 以json格式的解析FTP上的文件,10秒超时
- Android MediaPlayer播放prepareAsync called in state 8解决办法
- Linux环境安装google v8
- 网上一些关于renderMonkey的教程: