前一段时间面试遇到这么个问题,面试关给我一张纸和一个笔写一下多线程读和多线程写(我在写这个问题的时候,面试官和我坐在一起说,我就看着你写就行,我那个心情啊!唉,激动!),同步问题:
伪代码:
//这个简单点
write
{
lock();
setdata();
unlock();
}
//这个麻烦点
//因为资源读是可以同时进行但是和写是要同步,不能同时进行
read
{
getCountLock();
//计算多少个线程在读
threadReadMethodCount++
CountUnlock();
//只需要知道
if(threadReadMethodCount > 1)
{
readData();
getCountLock();
//每次读取数据,计数要减去1
threadReadMethodCount--;
CountUnlock();
}
else
{
//读写锁
lock();
readData();
threadReadMethodCount--;
}
if(threadReadMethodCount == 0)
{
//当最后一个读线程释放资源,释放读写锁
unlock();
}
}