$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 | 失败 |