上一篇《mysql metadata lock(一)》介绍了为什么引入MDL,MDL作用以及MDL锁导致阻塞的几种典型场景,文章的最后还留下了一个小小的疑问。本文将更详细的介绍MDL,主要侧重介绍MDL的原理和实现。一般而言,商业数据库系统实现锁,一般将锁划分为读锁(共享锁)和写锁(排它锁),为.....
分类:
数据库 时间:
2015-02-27 18:22:21
阅读次数:
197
上文讨论了互斥量和条件变量用于线程的同步,本文将讨论读写锁和自旋锁的使用,并给出了相应的代码和注意事项,相关代码也可在我的github上下载。
读写锁
对于互斥量要么是锁住状态要么是不加锁锁状态,而且一次只有一个线程可以对其加锁,而读写锁对线程的读数据加锁请求和写数据加锁请求进行了区分,从而在某些情况下,程序有更高的并发性。对于读写锁,一次只有一个线程可以占有写模式的读写锁,但是多个线程可...
分类:
编程语言 时间:
2015-02-25 17:08:45
阅读次数:
162
Posix读写锁int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,
const pthread_rwlockattr_t *restrict attr);
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
int pthrea...
分类:
编程语言 时间:
2015-02-19 18:39:41
阅读次数:
229
BlockingCache是对Ehcache进行的扩展,BlockingCache内置了读写锁,不需要用户显示调用。要彻底分析BlockingCache的原理,需要首先来看一下它内部用到的一些类。public interface CacheLockProvider { /** * Ge...
分类:
系统相关 时间:
2015-02-13 11:34:27
阅读次数:
334
事件:a文件中操作$_SESSION['start'] = 'yes'; sleep(100); 休眠100s 在这休眠的时间段中,b文件操作$_SESSION['start'] = 'no';结果:b文件一直在等待,等到a文件休眠结束才执行原因:通过google查找,得知session...
分类:
Web程序 时间:
2015-02-08 19:25:04
阅读次数:
142
在Java5.0之前,只有synchronized(内置锁)和volatile. Java5.0后引入了显示锁ReentrantLock.ReentrantLock概况ReentrantLock是可重入的锁,它不同于内置锁, 它在每次使用都需要显示的加锁和解锁, 而且提供了更高级的特性:公平锁, 定...
分类:
编程语言 时间:
2015-02-08 12:48:17
阅读次数:
171
读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁。在C#中,推荐使用ReaderWriterLockSlim类来完成读写锁的功能。某些场合下,对一个对象的读取次数远远大于修改次数,如果只是简单的用lock方式加锁,则会影响读取的效率。而如果采用读...
一、基础知识。1:线程同步机制:互斥量,读写锁,条件变量,自旋锁,屏障。 1,互斥量:每个进程访问被互斥量保护的资源时,都需要先对互斥量进行判断。 1)互斥量重要属性:进程共享属性,健壮属性,类型属性。 2)部分系统 不支持 进程共享属性 3)对互斥量重复加锁会导致死锁。 2,...
分类:
编程语言 时间:
2015-02-03 16:37:20
阅读次数:
282
并发控制是DBMS的关键技术,并发控制技术也称为同步机制,其实现通常依赖于底层的并发控制机制。操作系统提供了多种同步对象,如事件 Event、互斥锁 Mutex和条件变量 Cond、信号量Semaphore、读写锁 RWLock、自旋锁 Spinlock等。数据库管理系统自己实现封锁主要是考虑:
锁语义加强:OS只提供排它锁。为了提高并发度,数据库至少需要共享锁和排它锁,即读锁和写锁;...
分类:
数据库 时间:
2015-01-30 10:50:25
阅读次数:
276
首先要了解下java1.6中的ConcurrentMap ,他是一个线程安全的Map实现,特别说明的是在没有特别需求的情况下可以用ConcurrentHashMap。我是想学习一下读写锁的应用,就自己实现了一个SimpleConcurrentHashMap...
分类:
编程语言 时间:
2015-01-30 06:48:50
阅读次数:
412