在学习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;
}
|