- 论坛徽章:
- 0
|
原帖由 xiaochangfu 于 2009-11-6 10:48 发表 ![]()
spin_lock_irqsave -------该宏如果获得自旋锁lock,它也将保存标志寄存器的值到变量flags中,并且失效本地中断,--------
-------本地中断失效??,是不是线程调度机制也被禁止了??
我写了个测试的驱动
...
case IOCTL_CMD_CLOSE:
{
spin_lock_irqsave (&test_lock, flags);
local_irq_disable();
printk("lock is :%d\n", spin_is_locked(&test_lock));
printk("i am pthread%d lock\n",arg);
count++;
printk("count= %d\n",count);
break;
}
case IOCTL_CMD_OPEN:
{
printk("count= %d\n",count);
printk("i am pthread%d unlock \n",arg);
spin_unlock_irqrestore (&test_lock, flags);
local_irq_enable();
count--;
printk("lock is :%d\n", spin_is_locked(&test_lock));
break;
}
结果OPEN: major=233, minor=1
lock is :0
i am pthread0 lock
count= 1
lock is :0
i am pthread1 lock
count= 2
lock is :0
i am pthread2 lock
count= 3
lock is :0
i am pthread3 lock
count= 4
lock is :0
i am pthread4 lock
结论:看来spinlock没有编译,,但是local_irq_enable();了 怎么线程调度还有呢??奇怪 |
|