数据库有x锁及s锁,请问如何用C++实现这种类似的读写锁。
远景能源的一面题目。解决方法如下:
用两个锁,一个mutex mlock一个semophore semlock,假设semlock初始为64,即最多不会超过64条线程同时做读写操作。
s锁(即读锁)的实现如下:
req semlock 1;//请求一个信号量资源(总共有64个资源)
do reading;
release semlock 1;x锁(即写锁)的实现如下:
req mlock;
req semlock 64;//请求全部64个信号量资源(总共有64个资源)
do writing;
release semlock 64;
release mlock;这样当有用户在read时,write无法获得全部64个资源,故被锁住。同理,当write正在进行时,全部64个资源都被占用,read无法请求到任一资源,被锁住。现在请思考,为什么需要mlock?(提示:死锁)
面试笔试题记录
最新推荐文章于 2024-07-08 17:23:16 发布