|
我有一个自旋锁的驱动代码,一个测试程序
在驱动代码中定义全局变量flag = 0,在open函数上锁
int led_open (struct inode * inode, struct file *file)
{
spin_lock(&lock);
if(flag != 0)
{
spin_unlock(&lock);
return -1;
}
flag=1;
return 0;
}
在close函数中解锁
int led_close (struct inode *inode, struct file *file)
{
spin_unlock(&lock);
flag = 0;
return 0;
}
测试程序就是open read sleep(7) write close
在虚拟机单核的时候,如果执行一个测试程序,在执行第二此测试程序,立即就死锁了,要重新关机再开机
再多核的时候,执行了一个测试程序,在执行第二个程序,此时第二次测试程序,第二个程序进程会自旋等待。
我想问一下,为什么单核的时候没有自旋等待,而是直接死锁了,自旋锁的定义不是一个进程占用了锁资源,另一个进程如果也要访问临界资源,抢不到锁应该自旋,为什么会直接死锁 |
|