文档首页/ LiteOS/ 内核/ 自旋锁/ 开发指南
更新时间:2021-07-08 GMT+08:00
分享

开发指南

使用场景

自旋锁可以提供任务之间的互斥访问机制,用来防止两个任务在同一时刻访问相同的共享资源。

功能

Huawei LiteOS 的自旋锁模块为用户提供下面几种功能,接口详细信息可以查看API参考。

功能分类

接口名

描述

初始化自旋锁

LOS_SpinInit

动态初始化自旋锁

SPIN_LOCK_INIT

静态初始化自旋锁

申请/释放自旋锁

LOS_SpinLock

申请指定的自旋锁,如果无法获取锁,会一直循环等待

LOS_SpinTrylock

尝试申请指定的自旋锁,如果无法获取锁,直接返回失败,而不会一直循环等待

LOS_SpinUnlock

释放指定的自旋锁

申请/释放自旋锁(同时进行关中断保护)

LOS_SpinLockSave

关中断后,再申请指定的自旋锁

LOS_SpinUnlockRestore

先释放指定的自旋锁,再恢复中断状态

获取自旋锁持有状态

LOS_SpinHeld

检查自旋锁是否已经被持有

开发流程

自旋锁的开发典型流程:

  1. 自旋锁依赖于SMP,可以通过make menuconfig配置,配置项的菜单路径为:Kernel ---> Enable Kernel SMP。

    配置项

    含义

    取值范围

    默认值

    依赖

    LOSCFG_KERNEL_SMP

    SMP控制开关

    YES/NO

    YES

    硬件支持多核

    LOSCFG_KERNEL_SMP_CORE_NUM

    多核core数量

    与架构相关

    2

  2. 创建自旋锁:使用LOS_SpinInit初始化自旋锁,或者使用SPIN_LOCK_INIT初始化静态内存的自旋锁。
  3. 申请自旋锁:使用接口LOS_SpinLock/LOS_SpinTrylock/LOS_SpinLockSave申请指定的自旋锁,申请成功就继续往后执行锁保护的代码;申请失败在自旋锁申请中忙等,直到申请到自旋锁为止。
  4. 释放自旋锁:使用LOS_SpinUnlock/LOS_SpinUnlockRestore接口释放自旋锁。锁保护代码执行完毕后,释放对应的自旋锁,以便其他核申请自旋锁。

相关文档