共享锁【S锁】又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 排他锁【X锁】又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A, ...
分类:
其他好文 时间:
2018-04-18 14:23:26
阅读次数:
190
信号量是一个计数器,通常在内核中实现,用于多个进程对共享数据对象的同步访问。使用信号量的头文件是#include <sys/sem.h> 信号量的使用规则: 若信号量为正,则进程可使用该资源。 若信号量为0,则进程阻塞等待,并将进程插入等待队列,直到该信号量的值大于0从等待队列中执行进程请求。 加锁 ...
分类:
系统相关 时间:
2018-04-17 21:21:30
阅读次数:
226
MySQL Innodb 中的锁 锁是用来解决并发冲突的必要手段,MySQL 中的并发主要是指多个线程同时对同一个数据库进行操作,其中不同线程可能代表不同的事务,本质上也就是对共享资源的不同事务的同时访问。 Innodb 支持行级锁和意向锁。行级锁就是对行记录进行加锁,行级锁也分为两种类型,一种是共 ...
分类:
数据库 时间:
2018-04-17 19:48:13
阅读次数:
203
1.卖票的方法 class TicketRest { int ticket = 1; int Max = 0; public TicketRest(int max) { Max = max; } /// <summary> /// 未加锁 /// </summary> /// <param name ...
分类:
编程语言 时间:
2018-04-17 00:02:27
阅读次数:
194
本文参考自MySQL官网5.6版本参考手册的14.5.1,此小节说明MySQL的锁分类,此外还有14.5.2小节和14.5.3小节详述事务隔离级别和各SQL语句的加锁模式,后两节将单独写2篇笔记。 https://dev.mysql.com/doc/refman/5.6/en/innodb-lock ...
分类:
数据库 时间:
2018-04-16 10:18:33
阅读次数:
174
1、原理介绍数据多版本(MVCC)是MySQL实现高性能的一个主要的一个主要方式,通过对普通的SELECT不加锁,直接利用MVCC读取指版本的值,避免了对数据重复加锁的过程。InnoDB支持MVCC多版本,其中RC和RR隔离级别是利用consistentreadview方式支持的,即在某个时刻对事物系统打快照记下所有活跃读写事务ID,之后读操作根据事务ID与快照中的事务ID进行比较,判断可见性。2
分类:
数据库 时间:
2018-04-15 16:18:04
阅读次数:
185
通过文件独占的方式,我们打开指定的文件后,用 lockf 对文件加锁,结束程序时解锁文件。 下面代码中我们将当前程序的 PID 写入文件。 cpp int writePidFile(const char pidFile) { char str[32]; int fd = open(pidFile, ...
分类:
其他好文 时间:
2018-04-15 11:48:46
阅读次数:
126
AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node。如下: 接着,我们再来看看AQS中的字段: 其中, node和tail分别表示头结点和尾节点,这两个字段是用来的保证同步队列原子入(出)队操作(具体后续在分析具体的实现类中说)。 state在此处可以简单理解为加锁的次数(每次加锁, ...
分类:
其他好文 时间:
2018-04-12 23:32:06
阅读次数:
203
package org.test; public class Singleton { public static void main(String[] args) { // TODO Auto-generated method stub Singleton singleton=Singleton.g... ...
分类:
编程语言 时间:
2018-04-12 22:31:09
阅读次数:
309
MyISAM锁机制: MyISAM只有表锁,分为X和S锁两种(或者叫read lock,write lock)。读加S锁,写加X锁。互相阻塞,因此并发DML性能并不好。 InnoDB锁机制: lock table/tables tab_name read/write; --手动加锁语句:(同样适用于 ...
分类:
数据库 时间:
2018-04-10 15:13:03
阅读次数:
242