OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7406|回复: 2

关于linux自旋锁spin_lock不自旋的问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2020-5-12
在线时间
2 小时
发表于 2020-5-16 22:46:38 | 显示全部楼层 |阅读模式
    在学习linux驱动的时候,对于自旋锁的概念有些疑问:示例代码中,当进程1在对临界区操作时,进行加锁,为什么要根据状态判断自旋锁是否被占用,然后进行解锁,退出当前进程。这么操作个人感觉无法体现出自旋锁空转的意义:在进程A中自旋锁上锁之后,进程B在对同一把锁执行上锁时,没有执行循环-空转-等待的操作,而是通过判断直接退出进程B了,需要多次执行程序来启动进程。应该如何修改相关代码来体现进程循环空转直至资源释放自动切换的概念?看实验现象不执行 spin_unlock_irqrestore(&gpioled.lock, flags),代码还是会往下执行啊。难道这个等待就是指不停地手动启动程序吗?这个spinlock只是操作了lock结构体,和其他临界区资源没什么关系啊。没有在spin_lock函数里一直自旋到先前的锁解锁再自动往下执行啊?
    手册自旋锁代码:

    spin_lock_irqsave(&gpioled.lock, flags);

    if (gpioled.dev_stats) {

    spin_unlock_irqrestore(&gpioled.lock, flags);

    return -EBUSY;

   }   



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-7-1
在线时间
29 小时
发表于 2020-7-22 11:07:09 | 显示全部楼层
有同样的疑惑,自旋为什么直接return了呢,不是应该卡在spin_lock_irqsave(&gpioled.lock, flags);这行代码直至这个锁被释放吗?怎么会return呢
回复 支持 反对

使用道具 举报

10

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-7-1
在线时间
29 小时
发表于 2020-7-22 15:53:58 | 显示全部楼层
zjj19941024 发表于 2020-7-22 11:07
有同样的疑惑,自旋为什么直接return了呢,不是应该卡在spin_lock_irqsave(&gpioled.lock, flags);这行代码 ...

我想了一下认为 如果用自旋做实验不太行,就是在临界区时间很短感受不到自旋的时间。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表