互斥锁试图将想进入临界区的所有线程都阻塞住,但是有时候该临界区会涉及由这些线程共享的一个或多个数据的访问或更新,这时候我们就需要用到读写锁。系统读写锁的分配规则:
(1)只要有没有线程持有给定的读写锁用于写,那么任意数量的线程可以持有该读写锁用于读。(系统规定写锁优先,但是可以更改为读锁优先)
(2)仅当没有线程持有某个读写锁用于读或用于写时,才能分配该读写锁用于写。读写锁用于读称为共享锁,读写...
分类:
系统相关 时间:
2016-05-31 10:39:18
阅读次数:
272
本章涉及到线程的一些基本知识点,讨论了现有的创建线程和销毁线程的POSIX.1原语,此外,重点介绍了线程同步问题,讨论了三种基本的同步机制:互斥量、读写锁、条件变量。 ...
分类:
编程语言 时间:
2016-05-30 12:47:57
阅读次数:
129
最近由于项目上面建议使用读写锁,而去除常见的lock锁。然后就按照需求封装了下锁。以简化锁的使用。但是开发C#的童鞋都知道lock关键字用起太方便了,但是lock关键字不支持超时处理。很无奈,为了实现类似lock的功能。于是通过使用using关键字和IDisposable实现了自己的锁方法 ...
分类:
其他好文 时间:
2016-05-21 12:58:55
阅读次数:
171
boost锁的概述:
boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。
举个通俗的例子,如果共享资源是一个自动锁住的房间,互斥体是钥匙,进入房间必须取钥匙,离开房间应该还钥匙。这就对应着互斥体的lock(取钥匙)和unlock(还钥匙)。
动态分配内存存在类似的情况。如果忘记delete,会导致内存泄漏。它是如何解决的?在栈上分配对象...
分类:
其他好文 时间:
2016-05-19 15:13:46
阅读次数:
247
参考自:http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
1、Socket 简介
本地的进程间通信(IPC)有多种方法:
1)消息传递(PIPE、FIFO、消息队列等)
2)同步(互斥量、条件变量、读写锁、记录锁、信号量等)
3)共享内存(匿名的和具名的)
4)远程过程调用(Sol...
分类:
其他好文 时间:
2016-05-18 19:34:28
阅读次数:
218
ReentrantReadWriteLock基于AQS实现读写锁的同步:
1.利用共享模式实现读锁,独占模式实现写锁;
2.支持公平和非公平,非公平的情况下可能会出现读锁阻塞写锁的场景;
3.写锁阻塞写锁和读锁,读锁阻塞写锁;
4.写锁可以降级为读锁,读锁不能升级为写锁,只能先release再lock;
5.写锁支持condition条件;
6.读写锁都支持超时/中断lock;
...
分类:
其他好文 时间:
2016-05-18 18:02:27
阅读次数:
190
这是一个来自实际项目的例子,在这个案例中,有同事基于jdk中的LinkedHashMap设计了一个LRUCache,为了提高性能,使用了 ReentrantReadWriteLock 读写锁:写锁对应put()方法,而读锁对应get()方法,期望通过读写锁来实现并发get()。 代码实现如下: [j ...
分类:
其他好文 时间:
2016-05-13 14:37:10
阅读次数:
165
类ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务。这样做虽然保证了实例变量的线程安全性,但效率却是非常低下的。所以在JDK中提供了一种读写锁ReentrantReadWriteLock类,使用它可以加快运行效率,在某些不需要操作实例变量的方法中,完全可以使用读写锁ReentrantReadWriteLock来提升...
分类:
编程语言 时间:
2016-05-13 01:12:59
阅读次数:
202
Linux IPC 常见的方式写 Linux Server 端程序,必然会涉及到进程间通信 IPC. 通信必然伴随着同步机制,下面是一些常见的通信与同步机制:
进程间通信:匿名管道,命名管道,消息队列,共享内存,Domain Socket, 本机 TCP Socket,文件
进程间同步:信号,信号量
线程间同步:条件变量,互斥量,读写锁,自旋锁,Barrier.
对于大部分的业务场景,本机 TCP...
分类:
系统相关 时间:
2016-05-12 23:26:34
阅读次数:
283
和被Synchronized修饰的对象同时只能被一个线程访问不同,ReadWriteLock接口提供了更细粒度锁机制。ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持,但是写入锁是独占的。所以在需要并发控制的读写操作中,若读取数据频率要明显高于修改数据频率的时候,我们可以考虑使用ReadWr...
分类:
编程语言 时间:
2016-05-06 16:08:42
阅读次数:
292