当前位置:  技术问答>linux和unix

spin_lock为什么不自旋?

    来源: 互联网  发布时间:2016-03-07

    本文导语:  static int globalvar_open(struct inode *inode, struct file *filp) {     spin_lock(&spin);     if(globalvar_count)     {         printk(KERN_ALERT "777n");        return -EBUSY;     }     globalvar_count++;     return 0; } 上述的代...

static int globalvar_open(struct inode *inode, struct file *filp)
{
    spin_lock(&spin);
    if(globalvar_count)
    {
        printk(KERN_ALERT "777n");
       return -EBUSY;
    }

    globalvar_count++;
    return 0;
}

上述的代码我经过调试后一直有个疑问,在第一个进程执行open系统调用后,没有释放该锁,但是当第二个进程通过系统调用open以后说打开设备失败,但是还能把那三个7打印出来,我想问的是这不与自旋锁的原理相矛盾吗?应该是第一个进程没有释放该锁的情况下第二个进程来打开时,spin_lock(&spin);那里应该自旋了,那为什么还能打印3个7呢?谢谢

|
要看看你的什么平台,内核是否编译为可抢占的,自旋锁主要针对SMP或单CPU但内核可抢占的情况,
对于单CPU和内核不支持抢占的系统,自旋锁退化为空操作。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3