东华大学计算机学院 研究生 数据库实验2

2018-11-28 18:16

数据库系统实现实验报告

Two Phase Locking

东华大学

数据库系统实现实验报告

题目:Two Phase Locking

学号: 姓名: 学院: 专业:

2131524 王国林

计算机科学与技术学院 计算机应用技术

指导老师: 王洪亚

I

数据库系统实现实验报告

Two Phase Locking

目录

1、实验目的 ..................................................................................................................................... 1 2、实验内容 ..................................................................................................................................... 1 3、程序运行的主要环境 ................................................................................................................. 1 4、设计思路 ..................................................................................................................................... 2

4.1总体设计 ............................................................................................................................. 2 4.2详细设计 ............................................................................................................................. 2 5、心得体会 ..................................................................................................................................... 6

II

数据库系统实现实验报告

Two Phase Locking

1、实验目的

通过基于锁的并发控制系统的模拟实现,掌握两段加锁协议和简单并发控制系统的构建;理解事务并发访问造成的不可串行化和如何保证可串行化的技术。

2、实验内容

构建一个基于锁的并发控制系统,具体包括:

随机生成若干(N个)并发执行的事务,每个事务为如下的操作序列T={begin-transaction}r(x1)w(x1,Val1)r(x2)w(x2,Val2)…{commit}。其中Val1,Val2等为随机生成的整数;事务读写操作的对象x1, x2…来自于数据库DB={x1, x2, x3, …},数据库大小自定义。每个事务具体操作那些数据对象也随机生成,请注意不是每个事务都访问数据库内的每个数据项。

构建模拟程序实现锁表和事务调度模块。

顺序执行随机生成的N个事务,记录下所有排列下的最终数据库状态。 不使用并发控制机制,并发执行所有N事务,将最终数据库状态和顺序执行的数据库状态做对比。其中并发执行的模拟可让每个事务执行完一个(或几个)操作后,随机挑选其他的事务执行,以此类推,直至所有事务全部提交。注意记录事务执行过程的并发性,即每个时刻有几个事务在同时执行。

使用两段加锁机制进行并发控制,查看事务执行后数据库的状态和某种顺序执行状态是否一致。

3、程序运行的主要环境

操作系统:win7 32位

CPU:Intel Pentium(R) Dual-Core T4400 @2.2GHz 内存:2GB DDR2 1.19GHz

1

数据库系统实现实验报告

Two Phase Locking

4、设计思路

4.1总体设计

在初始化各种数据类型后,用WithoutTwoPhaseLocking()模拟运行没有两阶段锁的情况下多事务运行,用TwoPhaseLocking()来模拟两阶段锁前提下多事务的运行。事务的个数在2-7个当中用随机函数随机产生,事务的开始优先也有随机函数决定,对于数据库中访问记录的位置也有随机函数产生,这样就可以模拟线程发生的随机性。

4.2详细设计

5.2.1初始化

? 初始化数据库,这里定义一个有十条记录的数据库: public static int test[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; ? 定义七个线程:

publicstaticThreadnum[] transactions = newThreadnum[7]; ? 每个事务的标志位以及访问标志位初始化为false:

public static void begin() {

}

for (int i = 0; i < 5; i++)

tag[i] = false;

for (int j = 0; j < 5; j++)

for (int m = 0; k < 10; k++)

value[j][k] = false;

4.2.2 不使用两阶段锁的事务执行情况

首先使用随机函数产生数量大于等于二的事务,在没有两阶段锁的情况下,这些事务的执行顺序是随机的,其读写操作的正确性都没有保证。同时他们的执行顺序可能是串行也可能不是。

WithoutTwoPhaseLocking()函数用来模拟不使用两阶段锁的情况下多事务并发执

2

数据库系统实现实验报告

Two Phase Locking

行的状况。

? 保证事务数目大于等于二:

inttasknum = (int) (Math.random() * 5); while (tasknum< 2)

tasknum = (int) (Math.random() * 5);

? 随机生成3个及其以上的active事务,由于线程之间的无序性,所以执行结果如下

所示:

可以看出T1开始的时间比T3早,但是结束的却比T3晚,任务执行顺序得不到保障,事务读写的正确性也得不到保障。

4.2.3 加锁的事务随机执行及其结果。 两阶段锁的兼容矩阵:

S X

在顺序执行的各个事务中,需要对各个操作加上相应的锁即s和x锁,为了

3

S T F X F F


东华大学计算机学院 研究生 数据库实验2.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:课堂教学中师生、生生互动关系的处理

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: