$darkmode
提供基于计数器的线程同步机制 更多...
结构体 | |
| struct | rt_semaphore |
| 信号量结构体 更多... | |
类型定义 | |
| typedef struct rt_semaphore * | rt_sem_t |
| 信号量类型指针定义 | |
函数 | |
| rt_err_t | rt_sem_init (rt_sem_t sem, const char *name, rt_uint32_t value, rt_uint8_t flag) |
| 初始化静态信号量 更多... | |
| rt_err_t | rt_sem_detach (rt_sem_t sem) |
| 脱离静态信号量 更多... | |
| rt_sem_t | rt_sem_create (const char *name, rt_uint32_t value, rt_uint8_t flag) |
| 创建动态信号量 更多... | |
| rt_err_t | rt_sem_delete (rt_sem_t sem) |
| 删除动态信号量对象 更多... | |
| rt_err_t | rt_sem_take (rt_sem_t sem, rt_int32_t timeout) |
| 获取信号量 更多... | |
| rt_err_t | rt_sem_trytake (rt_sem_t sem) |
| 尝试立即获取信号量 更多... | |
| rt_err_t | rt_sem_release (rt_sem_t sem) |
| 释放信号量 更多... | |
| rt_err_t | rt_sem_control (rt_sem_t sem, int cmd, void *arg) |
| 控制信号量属性或行为 更多... | |
提供基于计数器的线程同步机制
RT-Thread 信号量具有以下特性:
典型应用场景:
| rt_err_t rt_sem_init | ( | rt_sem_t | sem, |
| const char * | name, | ||
| rt_uint32_t | value, | ||
| rt_uint8_t | flag | ||
| ) |
初始化静态信号量
初始化用户提供的静态信号量对象
| [in] | sem | 静态信号量对象 | ||||||
| [in] | name | 信号量名称 | ||||||
| [in] | value | 初始信号量值 | ||||||
| [in] | flag | 等待标志位
|
| RT_EOK | 成功 |
| !RT_EOK | 失败 |
| rt_err_t rt_sem_detach | ( | rt_sem_t | sem | ) |
脱离静态信号量
从内核对象管理中移除静态信号量对象
| [in] | sem | 静态信号量对象 |
| RT_EOK | 成功 |
| !RT_EOK | 失败 |
| rt_sem_t rt_sem_create | ( | const char * | name, |
| rt_uint32_t | value, | ||
| rt_uint8_t | flag | ||
| ) |
创建动态信号量
创建动态信号量,内核会自动分配内存空间
| [in] | name | 信号量名称 | ||||||
| [in] | value | 初始值 | ||||||
| [in] | flag | 等待标志位
|
| !RT_NULL | 成功 |
| RT_NULL | 失败 |
| rt_err_t rt_sem_delete | ( | rt_sem_t | sem | ) |
删除动态信号量对象
删除创建的信号量,释放其占用的内存资源
| [in] | sem | 信号量对象指针 |
| RT_EOK | 成功 |
| !RT_EOK | 失败 |
| rt_err_t rt_sem_take | ( | rt_sem_t | sem, |
| rt_int32_t | timeout | ||
| ) |
获取信号量
尝试从信号量获取一个资源,若资源不可用,则阻塞指定时间等待
| [in] | sem | 信号量对象指针 | ||||||||
| [in] | timeout | 超时时间
|
| RT_EOK | 成功获取信号量 |
| -RT_ETIMEOUT | 超时 |
| rt_err_t rt_sem_trytake | ( | rt_sem_t | sem | ) |
尝试立即获取信号量
若信号量资源可用则立即获取,等效于 rt_sem_take(..., RT_WAITING_NO)
| [in] | sem | 信号量对象指针 |
| RT_EOK | 成功获取信号量 |
| !RT_EOK | 失败 |
| rt_err_t rt_sem_release | ( | rt_sem_t | sem | ) |
释放信号量
向信号量添加一个资源计数器,可能会唤醒正在等待的线程
| [in] | sem | 信号量对象指针 |
| RT_EOK | 成功 |
| !RT_EOK | 失败 |
| rt_err_t rt_sem_control | ( | rt_sem_t | sem, |
| int | cmd, | ||
| void * | arg | ||
| ) |
控制信号量属性或行为
对信号量对象执行特定控制命令
| [in] | sem | 信号量对象指针 |
| [in] | cmd | 控制命令 |
| [in] | arg | 命令参数指针 |
| RT_EOK | 成功 |
| !RT_EOK | 失败 |