提供AliOS Things系统内核互斥量功能的基础API.
◆ aos_mutex_t
◆ aos_mutex_create()
创建互斥量,该接口在内核中创建一个互斥量对象,并返回该对象的句柄。
- 错误处理
- 如果互斥量对象句柄为NULL,则返回-EINVAL。 如果在创建的过程中内存不足,则返回-ENOMEM。
- 参数
-
[out] | mutex | 互斥量对象句柄,该接口会创建一个互斥量对象,成功后把对象的地址通过此参数返回。 |
[in] | options | 创建互斥量的选项,目前还没有支持的选项,待后续扩展。 |
- 返回
- 状态码
- 返回值
-
0 | 创建互斥量成功 |
-EINVAL | 传入的参数非法 |
-ENOMEM | 内存不足 |
◆ aos_mutex_free()
销毁互斥量,该接口释放互斥量对象的资源,唤醒所有阻塞在该互斥量的任务。
- 错误处理
- 如果互斥量对象句柄参数为NULL, 或者互斥量对象非法(没有成功创建或者对象类型不是互斥量),则返回-EINVAL。
- 参数
-
- 返回
- 无
◆ aos_mutex_is_valid()
This function will check if mutex is valid. Deprecated, not Recommended.
- 参数
-
[in] | mutex | pointer to the mutex. |
- 返回
- false: invalid, true: valid.
◆ aos_mutex_lock()
锁定互斥量,该接口申请获得一把互斥量锁,常被用于任务之间保护共享资源。 如果该互斥量锁当前没有其他任务持有,则当前任务能够立即获取这把锁并成功返回。 如果该互斥量锁当前被其他任务持有,同时指定AOS_NO_WAIT,则不等待立即返回错误-1。 如果该互斥量锁当前被其他任务持有,同时指定AOS_WAIT_FOREVER,则永远等待直到获得该互斥量锁。 等待时当前任务处于阻塞状态,等待该互斥量锁。
- 注解
- 注意内核中允许互斥量嵌套,如果任务再次获得自身持有的互斥量锁,则返回成功。
- 错误处理
- 如果互斥量对象句柄参数为NULL, 或者互斥量对象非法(没有成功创建或者对象类型不是互斥量),则返回-EINVAL。
- 参数
-
[in] | mutex | 互斥量对象句柄。 |
[in] | timeout | 超时时间(单位:ms)AOS_WAIT_FOREVER: 永远等待。 AOS_NO_WAIT: 不等待。 |
- 返回
- 状态码
- 返回值
-
0 | 返回成功,此时当前任务获得这把互斥量锁。 |
-EINVAL | 参数非法 |
-ETIMEDOUT | 等待超时 |
-1 | 其他操作 |
◆ aos_mutex_new()
Alloc a mutex. Deprecated, not Recommended.
- 参数
-
[in] | mutex | pointer of mutex object, mutex object must be alloced, hdl pointer in aos_mutex_t will refer a kernel obj internally. |
- 返回
- 0: success.
◆ aos_mutex_unlock()
解锁互斥量,该接口释放自身持有的互斥量锁。 如果此时有其他任务阻塞在该互斥量锁上, 则从阻塞任务队列中挑选一个优先级最高的任务唤醒,使其继续。
- 注解
- 任务只能释放自身持有的互斥量锁,否则返回错误-EPERM。 内核中允许互斥量锁嵌套,如果进行过多次的互斥量锁定操作,注意需要进行相同次数的解锁操作,否则其他竞争的任务会一直阻塞。
- 错误处理
- 如果互斥量对象句柄参数为NULL, 或者互斥量对象非法(没有成功创建或者对象类型不是互斥量),则返回-EINVAL。
- 参数
-
- 返回
- 状态码
- 返回值
-
0 | 返回成功, |
-EINVAL | 参数非法 |
-EPERM | 权限不够(释放其他任务持有的互斥量锁) |