spin lock原理[2013网易笔试]解决方法
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 在网上找到的估计出题人正式这篇论文的作者