电子产业一站式赋能平台

PCB联盟网

搜索
查看: 1039|回复: 0
收起左侧

大佬门,看过来

[复制链接]

600

主题

954

帖子

5061

积分

四级会员

Rank: 4

积分
5061
发表于 2022-12-30 14:24:50 | 显示全部楼层 |阅读模式
我有一个自旋锁的驱动代码,一个测试程序
在驱动代码中定义全局变量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
在虚拟机单核的时候,如果执行一个测试程序,在执行第二此测试程序,立即就死锁了,要重新关机再开机
再多核的时候,执行了一个测试程序,在执行第二个程序,此时第二次测试程序,第二个程序进程会自旋等待。
我想问一下,为什么单核的时候没有自旋等待,而是直接死锁了,自旋锁的定义不是一个进程占用了锁资源,另一个进程如果也要访问临界资源,抢不到锁应该自旋,为什么会直接死锁
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条


联系客服 关注微信 下载APP 返回顶部 返回列表