linux-自旋锁

  自旋锁,就像名字一样,自旋。我们可以把自旋锁看作是一个变量,这个变量把临界区标记以下,如果进程正在运行去访问变量,另一个进程也想过去访问,那么因为有自旋锁的存在,另一个进程就要原地打转,等正在运行的运行结束再去访问。就像是一个陀螺一样,不停的打转,等着变量空闲再去访问。
  自旋锁的内核接口

//初始化自旋锁,将自旋锁设置为1,表示有一个资源可用。
spin_lock_init(lock)    

//尝试锁上自旋锁(置0),如果原来锁的值为1,返回1,否则返回0。
spin_trylock(lock)  

//循环等待直到自旋锁解锁(置为1),然后,将自旋锁锁上(置为0)。
spin_lock(lock)     

//将自旋锁解锁(置为1)。
spin_unlock(lock)   

自旋锁的使用实例,使设备只能让一个进程打开

int  x_count=0//定义文件的打开次数
spin_lock_t lock;//定义一个自旋锁


int  x_init(void)
{

      ............

      spin_lock_init(&lock);

      ............

      return 0;
}

static int led_open(...............)
{

     ....
     //获取自旋锁
    spin_lock(&lock);
    if(x_count)
    {
        /*已经打开了*/
        //将自旋锁解锁(置为1)。
         spin_unlock(lock);
        //直接返回
        return -EBUSY;
    }
     x_count++//如果打开了自加1
     //将自旋锁解锁(置为1)。
     spin_unlock(lock);
     .......
    return 0;
}
static  int led_release(..............)
{
     .........
     //循环等待直到自旋锁解锁(置为1),然后,将自旋锁锁上(置为0)。
     spin_lock(&lock)   
     x_count--//将自旋锁解锁(置为1)。
    spin_unlock(&lock)  
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值