-
Notifications
You must be signed in to change notification settings - Fork 5
并发控制算法实验
Menci edited this page Dec 8, 2021
·
3 revisions
你需要实现 2PL(Two-phase locking,两段锁协议)并发控制算法,通过多线程下的并发事务测试,并尽可能提高运行效率。
评分方式分为正确性(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 容器的线程安全性。如果需要加锁,请多加注意加锁的粒度。