一 线程间的同步与互斥:信号量、互斥量、实践集
线程互斥是指对于临界区资源访问的排它性,如多个线程对共享内存资源的访问,生产消费型对产品的操作。临界区操作操作方法有:
rt_hw_interrupt_disable() / rt_enter_critical()进入临界区,
rt_hw_interrupt_enable() / rt_exit_critical()退出临界区
信号量的创建:rt_sem_t rt_sem_create(const char *name,rt_uint32_t value,rt_uint8_t flag);//信号量值为0时则资源不可用进入等待(按队列或优先级排序)
rt_err_t rt_sem_delete(rt_sem_t sem);
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_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time);
rt_err_t rt_sem_trytake(rt_sem_t sem);//不等待式申请。
信号量的释放:rt_err_t rt_sem_release(rt_sem_t sem);//加1
用途:
1 线程间同步/中断与线程间的同步:类似完成标志,初始值为0,线程或中断触发后为1即先释放后才能申请到,使原来等该标志的实践由false变为true
2 锁(二值信号量的互斥):初值为1,申请到的线程可以使用共享资源,并将信号量变为0;别的线程则因为资源已经被占用则必须等待直到资源被释放(信号量变为大于0)
3资源计数:适合于线程间工作处理速度不匹配的场合,可进行递增和递减。
原文地址:https://www.cnblogs.com/jieruishu/p/11766365.html