rsoc/Day3
james a66c2910bd 补充笔记、线程示例 2024-07-24 10:06:29 +08:00
..
README.md 补充笔记、线程示例 2024-07-24 10:06:29 +08:00
image-1.png 补充笔记、线程示例 2024-07-24 10:06:29 +08:00
image-2.png 补充笔记、线程示例 2024-07-24 10:06:29 +08:00
image-3.png 补充笔记、线程示例 2024-07-24 10:06:29 +08:00
image-4.png 补充笔记、线程示例 2024-07-24 10:06:29 +08:00
image-5.png 补充笔记、线程示例 2024-07-24 10:06:29 +08:00
image-6.png 补充笔记、线程示例 2024-07-24 10:06:29 +08:00
image.png 补充笔记、线程示例 2024-07-24 10:06:29 +08:00

README.md

Day 3 IPC

alt text alt text

临界区

only one can use the resource at a time

有人用了,别人就不能用

阻塞非阻塞

Blocking/Non-blocking alt text 阻塞: 等待,一个线程 非阻塞: 不等待

挂起

死锁

两个线程互相等待 alt text

信号量

用于线程间同步、互斥

  • 二值信号量 约等于bool 获得1不得0 alt text
  • 计数信号量 初始为期待的值???
  • alt text
  • 裸机 根据全局变量flag 反应(错误、破坏、不能挂起一直停在这……???)
  • 用系统的api不要flag
  • 三种反应:一直等,等一会,不等

api

√ 创建信号量(动态)节省资源,动态分配,可能内存破坏

注意区别?

rt_sem_t rt_sem_create(const char* name, rt_uint32_t value, rt_uint8_t flag);
// flag:RT_IPC_FLAG_FIFO先进先出/RT_IPC_FLAG_PRIO优先级

√ 删除信号量

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);

脱离信号量

从内核对象管理器中脱离

获取信号量

time 单位tick alt text

无等待获取信号量

rt_err_t rt_sem_trytake(rt_sem_t sem);

释放信号量

rt_err_t rt_sem_release(rt_sem_t sem);