首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spin lock原理[2013网易笔试]解决方法

2013-01-12 
spin lock原理[2013网易笔试]void initlock(volatile int* lock_status){*lock_status 0}void lock(vol

spin lock原理[2013网易笔试]

void initlock(volatile int* lock_status)
{
*lock_status = 0;                       
}
void lock(volatile int* lock_status)
{
while(test_and_set(lock_status = =1);                       
}
void unlock(volatile int* lock_status)
{
*lock_status = 0;
}

问题:
1.volatile的作用?
2.lock函数优化(针对在多cpu上提高cpu cache)?
3.上面的缺陷(内存模式上的)?
[解决办法]
1. *lock_status是共享变量,加上volatile关键字后每次都从内存读取而不是寄存器,保证其为最新值
2. cpu cache?是不是cpu usage啊? while(test_and_set(lock_status = =1); 这里在空转,可以加个sleep(100)之类的
3.  unlock()中*lock_status = 0之前要加memory barrier,否则支持乱序执行的cpu可能会提前赋值导致lock失效
[解决办法]
http://irl.cs.ucla.edu/~yingdi/web/paperreading/smp_locking.pdf  在网上找到的估计出题人正式这篇论文的作者

热点排行