Skip to content

并发控制算法实验

Menci edited this page Dec 8, 2021 · 3 revisions

你需要实现 2PL(Two-phase locking,两段锁协议)并发控制算法,通过多线程下的并发事务测试,并尽可能提高运行效率。

请参考 README 以了解如何构建以及需要实现的接口

评分方式

评分方式分为正确性(80 分)和性能(20 分)两部分。

正确性

当你的程序通过事务冲突测试时,也就是成功在 build 目录下执行以下命令

./bin/conflict-test -t ../conflict.txt

时,获得正确性分数。

这部分分数与你实现的算法有关:

  • 如果你实现了 No Wait(需要加锁但对应锁未释放时不等待锁释放,直接回滚)策略,则可以得到 60 分
  • 如果你实现了 Wait-Die(需要加锁但对应锁未释放时等待锁释放,如果超时则回滚)策略,则可以得到 80 分

性能

我们使用交互式并发测试的结果,也就是在 build 目录下执行以下命令

./bin/interactive-test -n <线程数>

时得到的 TPS(Transactions per second,每秒成功提交的事务)值来评价性能。助教们将选出性能最好的同学的性能数据作为基准,性能在此之下的同学将得到比 20 分更低的分数。

注意事项

同一份代码在不同机器上运行时的性能差距可能较大,最终检查时以服务器上为准。

由于这可能是很多同学第一次编写多线程并发的程序,在编写代码时请多加注意 STL 容器的线程安全性。如果需要加锁,请多加注意加锁的粒度。

Clone this wiki locally