更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_mux.h 文件参考

浏览源代码.

结构体

struct  LosMuxAttr
 
struct  OsMux
 

类型定义

typedef struct OsMux LosMux
 

枚举

enum  { LOS_MUX_PRIO_NONE = 0 , LOS_MUX_PRIO_INHERIT = 1 , LOS_MUX_PRIO_PROTECT = 2 }
 
enum  { LOS_MUX_NORMAL = 0 , LOS_MUX_RECURSIVE = 1 , LOS_MUX_ERRORCHECK = 2 , LOS_MUX_DEFAULT = LOS_MUX_RECURSIVE }
 

函数

UINT32 LOS_MuxAttrInit (LosMuxAttr *attr)
 互斥属性初始化 更多...
 
UINT32 LOS_MuxAttrDestroy (LosMuxAttr *attr)
 ????? 销毁互斥属 ,这里啥也没干呀 更多...
 
UINT32 LOS_MuxAttrGetType (const LosMuxAttr *attr, INT32 *outType)
 获取互斥锁的类型属性,由outType接走,不送! 更多...
 
UINT32 LOS_MuxAttrSetType (LosMuxAttr *attr, INT32 type)
 设置互斥锁的类型属性
更多...
 
UINT32 LOS_MuxAttrGetProtocol (const LosMuxAttr *attr, INT32 *protocol)
 获取互斥锁的类型属性 更多...
 
UINT32 LOS_MuxAttrSetProtocol (LosMuxAttr *attr, INT32 protocol)
 设置互斥锁属性的协议 更多...
 
UINT32 LOS_MuxAttrGetPrioceiling (const LosMuxAttr *attr, INT32 *prioceiling)
 获取互斥锁属性优先级 更多...
 
UINT32 LOS_MuxAttrSetPrioceiling (LosMuxAttr *attr, INT32 prioceiling)
 设置互斥锁属性的优先级的上限 更多...
 
UINT32 LOS_MuxSetPrioceiling (LosMux *mutex, INT32 prioceiling, INT32 *oldPrioceiling)
 设置互斥锁的优先级的上限,老优先级由oldPrioceiling带走 更多...
 
UINT32 LOS_MuxGetPrioceiling (const LosMux *mutex, INT32 *prioceiling)
 获取互斥锁的优先级的上限 更多...
 
BOOL LOS_MuxIsValid (const LosMux *mutex)
 互斥锁是否有效 更多...
 
UINT32 LOS_MuxInit (LosMux *mutex, const LosMuxAttr *attr)
 Init a mutex. 更多...
 
UINT32 LOS_MuxDestroy (LosMux *mutex)
 Destroy a mutex. 更多...
 
UINT32 LOS_MuxLock (LosMux *mutex, UINT32 timeout)
 Wait to lock a mutex. 更多...
 
UINT32 LOS_MuxTrylock (LosMux *mutex)
 Try wait to lock a mutex. 更多...
 
UINT32 LOS_MuxUnlock (LosMux *mutex)
 Release a mutex. 更多...
 

枚举类型说明

◆ anonymous enum

anonymous enum
枚举值
LOS_MUX_PRIO_NONE 

线程的优先级和调度不会受到互斥锁影响,先来后到,普通排队.

LOS_MUX_PRIO_INHERIT 

当高优先级的等待低优先级的线程释放锁时,低优先级的线程以高优先级线程的优先级运行。 当线程解锁互斥量时,线程的优先级自动被将到它原来的优先级

LOS_MUX_PRIO_PROTECT 

详见: OsMuxPendOp 中的注解,详细说明了LOS_MUX_PRIO_PROTECT的含义

在文件 los_mux.h48 行定义.

48 {
49 LOS_MUX_PRIO_NONE = 0, ///< 线程的优先级和调度不会受到互斥锁影响,先来后到,普通排队.
50 LOS_MUX_PRIO_INHERIT = 1, ///< 当高优先级的等待低优先级的线程释放锁时,低优先级的线程以高优先级线程的优先级运行。
51 ///< 当线程解锁互斥量时,线程的优先级自动被将到它原来的优先级
52 LOS_MUX_PRIO_PROTECT = 2 ///< 详见: OsMuxPendOp 中的注解,详细说明了LOS_MUX_PRIO_PROTECT的含义
53};
@ LOS_MUX_PRIO_INHERIT
Definition: los_mux.h:50
@ LOS_MUX_PRIO_PROTECT
详见: OsMuxPendOp 中的注解,详细说明了LOS_MUX_PRIO_PROTECT的含义
Definition: los_mux.h:52
@ LOS_MUX_PRIO_NONE
线程的优先级和调度不会受到互斥锁影响,先来后到,普通排队.
Definition: los_mux.h:49

◆ anonymous enum

anonymous enum
枚举值
LOS_MUX_NORMAL 

非递归锁 只有[0.1]两个状态,不做任何特殊的错误检,不进行deadlock detection(死锁检测)

LOS_MUX_RECURSIVE 

递归锁 允许同一线程在互斥量解锁前对该互斥量进行多次加锁。递归互斥量维护锁的计数,在解锁次数和加锁次数不相同的情况下,不会释放锁,别的线程就无法加锁此互斥量。

LOS_MUX_ERRORCHECK 

进行错误检查,如果一个线程企图对一个已经锁住的mutex进行relock或对未加锁的unlock,将返回一个错误。

LOS_MUX_DEFAULT 

在文件 los_mux.h55 行定义.

55 {
56 LOS_MUX_NORMAL = 0, ///< 非递归锁 只有[0.1]两个状态,不做任何特殊的错误检,不进行deadlock detection(死锁检测)
57 LOS_MUX_RECURSIVE = 1, ///< 递归锁 允许同一线程在互斥量解锁前对该互斥量进行多次加锁。递归互斥量维护锁的计数,在解锁次数和加锁次数不相同的情况下,不会释放锁,别的线程就无法加锁此互斥量。
58 LOS_MUX_ERRORCHECK = 2, ///< 进行错误检查,如果一个线程企图对一个已经锁住的mutex进行relock或对未加锁的unlock,将返回一个错误。
59 LOS_MUX_DEFAULT = LOS_MUX_RECURSIVE //鸿蒙系统默认使用递归锁
60};
@ LOS_MUX_ERRORCHECK
进行错误检查,如果一个线程企图对一个已经锁住的mutex进行relock或对未加锁的unlock,将返回一个错误。
Definition: los_mux.h:58
@ LOS_MUX_RECURSIVE
递归锁 允许同一线程在互斥量解锁前对该互斥量进行多次加锁。递归互斥量维护锁的计数,在解锁次数和加锁次数不相同的情况下,不会释放锁,别的线程就无法加锁此互斥量。
Definition: los_mux.h:57
@ LOS_MUX_DEFAULT
Definition: los_mux.h:59
@ LOS_MUX_NORMAL
非递归锁 只有[0.1]两个状态,不做任何特殊的错误检,不进行deadlock detection(死锁检测)
Definition: los_mux.h:56

函数说明

◆ LOS_MuxAttrDestroy()

UINT32 LOS_MuxAttrDestroy ( LosMuxAttr attr)

????? 销毁互斥属 ,这里啥也没干呀

在文件 los_mux.c109 行定义.

110{
111 if (attr == NULL) {
112 return LOS_EINVAL;
113 }
114
115 return LOS_OK;
116}
这是这个函数的调用关系图:

◆ LOS_MuxAttrGetPrioceiling()

UINT32 LOS_MuxAttrGetPrioceiling ( const LosMuxAttr attr,
INT32 prioceiling 
)

获取互斥锁属性优先级

在文件 los_mux.c174 行定义.

175{
176 if (attr == NULL) {
177 return LOS_EINVAL;
178 }
179
180 if (prioceiling != NULL) {
181 *prioceiling = attr->prioceiling;
182 }
183
184 return LOS_OK;
185}
UINT8 prioceiling
优先级上限
Definition: los_mux.h:64
这是这个函数的调用关系图:

◆ LOS_MuxAttrGetProtocol()

UINT32 LOS_MuxAttrGetProtocol ( const LosMuxAttr attr,
INT32 protocol 
)

获取互斥锁的类型属性

在文件 los_mux.c146 行定义.

147{
148 if ((attr != NULL) && (protocol != NULL)) {
149 *protocol = attr->protocol;
150 } else {
151 return LOS_EINVAL;
152 }
153
154 return LOS_OK;
155}
UINT8 protocol
协议
Definition: los_mux.h:63
这是这个函数的调用关系图:

◆ LOS_MuxAttrGetType()

UINT32 LOS_MuxAttrGetType ( const LosMuxAttr attr,
INT32 outType 
)

获取互斥锁的类型属性,由outType接走,不送!

在文件 los_mux.c118 行定义.

119{
120 INT32 type;
121
122 if ((attr == NULL) || (outType == NULL)) {
123 return LOS_EINVAL;
124 }
125
126 type = (INT32)(attr->type & MUTEXATTR_TYPE_MASK);
127 if ((type < LOS_MUX_NORMAL) || (type > LOS_MUX_ERRORCHECK)) {
128 return LOS_EINVAL;
129 }
130
131 *outType = type;
132
133 return LOS_OK;
134}
signed int INT32
Definition: los_typedef.h:60
UINT8 type
类型属性
Definition: los_mux.h:65
这是这个函数的调用关系图:

◆ LOS_MuxAttrInit()

UINT32 LOS_MuxAttrInit ( LosMuxAttr attr)

互斥属性初始化

在文件 los_mux.c97 行定义.

98{
99 if (attr == NULL) {
100 return LOS_EINVAL;
101 }
102
103 attr->protocol = LOS_MUX_PRIO_INHERIT; //协议默认用继承方式, A(4)task等B(19)释放锁时,B的调度优先级直接升到(4)
104 attr->prioceiling = OS_TASK_PRIORITY_LOWEST;//最低优先级
105 attr->type = LOS_MUX_DEFAULT; //默认 LOS_MUX_RECURSIVE
106 return LOS_OK;
107}
这是这个函数的调用关系图:

◆ LOS_MuxAttrSetPrioceiling()

UINT32 LOS_MuxAttrSetPrioceiling ( LosMuxAttr attr,
INT32  prioceiling 
)

设置互斥锁属性的优先级的上限

在文件 los_mux.c187 行定义.

188{
189 if ((attr == NULL) ||
190 (prioceiling < OS_TASK_PRIORITY_HIGHEST) ||
191 (prioceiling > OS_TASK_PRIORITY_LOWEST)) {
192 return LOS_EINVAL;
193 }
194
195 attr->prioceiling = (UINT8)prioceiling;
196
197 return LOS_OK;
198}
unsigned char UINT8
Definition: los_typedef.h:55
这是这个函数的调用关系图:

◆ LOS_MuxAttrSetProtocol()

UINT32 LOS_MuxAttrSetProtocol ( LosMuxAttr attr,
INT32  protocol 
)

设置互斥锁属性的协议

在文件 los_mux.c157 行定义.

158{
159 if (attr == NULL) {
160 return LOS_EINVAL;
161 }
162
163 switch (protocol) {
167 attr->protocol = (UINT8)protocol;
168 return LOS_OK;
169 default:
170 return LOS_EINVAL;
171 }
172}
这是这个函数的调用关系图:

◆ LOS_MuxAttrSetType()

UINT32 LOS_MuxAttrSetType ( LosMuxAttr attr,
INT32  type 
)

设置互斥锁的类型属性

在文件 los_mux.c136 行定义.

137{
138 if ((attr == NULL) || (type < LOS_MUX_NORMAL) || (type > LOS_MUX_ERRORCHECK)) {
139 return LOS_EINVAL;
140 }
141
142 attr->type = (UINT8)((attr->type & ~MUTEXATTR_TYPE_MASK) | (UINT32)type);
143 return LOS_OK;
144}
unsigned int UINT32
Definition: los_typedef.h:57
这是这个函数的调用关系图:

◆ LOS_MuxGetPrioceiling()

UINT32 LOS_MuxGetPrioceiling ( const LosMux mutex,
INT32 prioceiling 
)

获取互斥锁的优先级的上限

在文件 los_mux.c229 行定义.

230{
231 if ((mutex != NULL) && (prioceiling != NULL) && (mutex->magic == OS_MUX_MAGIC)) {
232 *prioceiling = mutex->attr.prioceiling;
233 return LOS_OK;
234 }
235
236 return LOS_EINVAL;
237}
UINT32 magic
Definition: los_mux.h:74
LosMuxAttr attr
Definition: los_mux.h:75
这是这个函数的调用关系图:

◆ LOS_MuxIsValid()

BOOL LOS_MuxIsValid ( const LosMux mutex)

互斥锁是否有效

在文件 los_mux.c239 行定义.

240{
241 if ((mutex != NULL) && (mutex->magic == OS_MUX_MAGIC)) {
242 return TRUE;
243 }
244
245 return FALSE;
246}
这是这个函数的调用关系图:

◆ LOS_MuxSetPrioceiling()

UINT32 LOS_MuxSetPrioceiling ( LosMux mutex,
INT32  prioceiling,
INT32 oldPrioceiling 
)

设置互斥锁的优先级的上限,老优先级由oldPrioceiling带走

在文件 los_mux.c200 行定义.

201{
202 INT32 ret;
203 INT32 retLock;
204 if ((mutex == NULL) ||
205 (prioceiling < OS_TASK_PRIORITY_HIGHEST) ||
206 (prioceiling > OS_TASK_PRIORITY_LOWEST)) {
207 return LOS_EINVAL;
208 }
209
210 retLock = LOS_MuxLock(mutex, LOS_WAIT_FOREVER);
211 if (retLock != LOS_OK) {
212 return retLock;
213 }
214
215 if (oldPrioceiling != NULL) {
216 *oldPrioceiling = mutex->attr.prioceiling;
217 }
218
219 ret = LOS_MuxAttrSetPrioceiling(&mutex->attr, prioceiling);
220
221 retLock = LOS_MuxUnlock(mutex);
222 if ((ret == LOS_OK) && (retLock != LOS_OK)) {
223 return retLock;
224 }
225
226 return ret;
227}
LITE_OS_SEC_TEXT UINT32 LOS_MuxUnlock(LosMux *mutex)
释放锁
Definition: los_mux.c:559
LITE_OS_SEC_TEXT UINT32 LOS_MuxLock(LosMux *mutex, UINT32 timeout)
拿互斥锁,
Definition: los_mux.c:437
LITE_OS_SEC_TEXT UINT32 LOS_MuxAttrSetPrioceiling(LosMuxAttr *attr, INT32 prioceiling)
设置互斥锁属性的优先级的上限
Definition: los_mux.c:187
函数调用图:
这是这个函数的调用关系图: