rtt学习之线程间同步与通信

一 线程间的同步与互斥:信号量、互斥量、实践集

线程互斥是指对于临界区资源访问的排它性,如多个线程对共享内存资源的访问,生产消费型对产品的操作。临界区操作操作方法有:

 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资源计数:适合于线程间工作处理速度不匹配的场合,可进行递增和递减。

       

      

猜你喜欢

转载自www.cnblogs.com/jieruishu/p/11766365.html
今日推荐