您的位置:首页 > 职场人生

面试笔试题记录

2015-09-21 20:04 344 查看
数据库有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?(提示:死锁)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试