- 博客(3)
- 收藏
- 关注
原创 SylixOS内存屏障、信号量
如果我们在一个核上对数据执行写入操作,并且通过一个标记来表示此数据已经写入完毕,另一个核通过此标记来判断数据是否已经写入完毕,就可能存在风险,这是因为标记可能已经被修改,但是数据操作还未完成,最终导致另一个核未能使用到正确的数据,从而带来不可预估的后果。需要注意的是,中断服务程序不能调用API_SemaphoreBPend函数来等待一个二进制信号量,因为该函数在二进制信号量值为FALSE时会阻塞当前执行的任务,而中断服务程序用来处理最紧急的事情,因此是不允许阻塞的。这种机制满足了读的高并发性。
2025-02-10 14:26:49
828
原创 SylixOS原子量操作、自旋锁操作
自旋锁在任何时刻最多只能有一个拥有者,也就是自旋锁最多只能被一个线程持有,如果一个线程试图请求一个已经被持有的自旋锁,那么这个任务就会一直在那里循环判断该自旋锁的拥有者是否已经释放了该锁,直到锁重新可用。为了避免这些问题,SylixOS提供了原子量类型atomic_t及其API,原子量类型可存储一个整型(INT)的值,同时使用原子量API对原子量进行的操作是一个原子操作,因为原子操作不可打断,这样在设备驱动的并发操作中也就不会存在混乱风险。的情况下,使用自旋锁才是合理的。是不可被打断的一个或者一系列操作。
2025-02-07 16:40:15
456
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅