文档首页 > > 开发指南> 内核开发指南> 互斥锁> 开发指导

开发指导

分享
更新时间:2020/06/24 GMT+08:00

使用场景

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

功能

Huawei LiteOS 系统中的互斥锁模块为用户提供下面几种功能。

功能分类

接口名

描述

互斥锁的创建和删除

LOS_MuxCreate

创建互斥锁

LOS_MuxDelete

删除指定的互斥锁

互斥锁的申请和释放

LOS_MuxPend

申请指定的互斥锁

LOS_MuxPost

释放指定的互斥锁

开发流程

互斥锁典型场景的开发流程:

  1. 创建互斥锁LOS_MuxCreate。
  2. 申请互斥锁LOS_MuxPend。

    申请模式有三种:无阻塞模式、永久阻塞模式、定时阻塞模式。

    • 无阻塞模式:任务需要申请互斥锁,若该互斥锁当前没有任务持有,或者持有该互斥锁的任务和申请该互斥锁的任务为同一个任务,则申请成功
    • 永久阻塞模式:任务需要申请互斥锁,若该互斥锁当前没有被占用,则申请成功。否则,该任务进入阻塞态,系统切换到就绪任务中优先级最高者继续执行。任务进入阻塞态后,直到有其他任务释放该互斥锁,阻塞任务才会重新得以执行
    • 定时阻塞模式:任务需要申请互斥锁,若该互斥锁当前没有被占用,则申请成功。否则该任务进入阻塞态,系统切换到就绪任务中优先级最高者继续执行。任务进入阻塞态后,指定时间超时前有其他任务释放该互斥锁,或者用户指定时间超时后,阻塞任务才会重新得以执行
  3. 释放互斥锁LOS_MuxPost。
    • 如果有任务阻塞于指定互斥锁,则唤醒最早被阻塞的任务,该任务进入就绪态,并进行任务调度
    • 如果没有任务阻塞于指定互斥锁,则互斥锁释放成功。
  4. 删除互斥锁LOS_MuxDelete。

互斥锁错误码

对互斥锁存在失败的可能性操作,包括互斥锁创建,互斥锁删除,互斥锁申请,互斥锁释放

序号

定义

实际数值

描述

参考解决方案

1

LOS_ERRNO_MUX_NO_MEMORY

0x02001d00

内存请求失败

减少互斥锁限制数量的上限

2

LOS_ERRNO_MUX_INVALID

0x02001d01

互斥锁不可用

传入有效的互斥锁的ID

3

LOS_ERRNO_MUX_PTR_NULL

0x02001d02

入参为空

确保入参可用

4

LOS_ERRNO_MUX_ALL_BUSY

0x02001d03

没有互斥锁可用

增加互斥锁限制数量的上限

5

LOS_ERRNO_MUX_UNAVAILABLE

0x02001d04

锁失败,因为锁被其他线程使用

等待其他线程解锁或者设置等待时间

6

LOS_ERRNO_MUX_PEND_INTERR

0x02001d05

在中断中使用互斥锁

在中断中禁止调用此接口

7

LOS_ERRNO_MUX_PEND_IN_LOCK

0x02001d06

任务调度没有使能,线程等待另一个线程释放锁

设置PEND为非阻塞模式或者使能任务调度

8

LOS_ERRNO_MUX_TIMEOUT

0x02001d07

互斥锁PEND超时

增加等待时间或者设置一直等待模式

9

LOS_ERRNO_MUX_OVERFLOW

0x02001d08

暂未使用,待扩展

10

LOS_ERRNO_MUX_PENDED

0x02001d09

删除正在使用的锁

等待解锁再删除锁

11

LOS_ERRNO_MUX_GET_COUNT_ERR

0x02001d0a

暂未使用,待扩展

12

LOS_ERRNO_MUX_REG_ERROR

0x02001d0b

暂未使用,待扩展

错误码定义:错误码是一个32位的存储单元,31~24位表示错误等级,23~16位表示错误码标志,15~8位代表错误码所属模块,7~0位表示错误码序号,如下所示:

#define LOS_ERRNO_OS_ERROR(MID, ERRNO) \

(LOS_ERRTYPE_ERROR | LOS_ERRNO_OS_ID | ((UINT32)(MID) << 8) | (ERRNO))

LOS_ERRTYPE_ERROR:Define critical OS errors

LOS_ERRNO_OS_ID:OS error code flag

LOS_MOD_MUX:Mutex module ID

MID:OS_MOUDLE_ID

ERRNO:error ID number

例如:

LOS_ERRNO_MUX_TIMEOUT LOS_ERRNO_OS_ERROR(LOS_MOD_MUX, 0x07)

平台差异性

无。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问