建筑网站模板,网件r6300v2,江苏分销网站建设,网站外包合作以下内容源于朱有鹏《物联网大讲堂》课程的学习#xff0c;如有侵权#xff0c;请告知删除。
一、概念
#xff08;1#xff09;竞争状态#xff08;简称竟态#xff09;#xff1b;
#xff08;2#xff09;临界段#xff08;某一段代码#xff0c;该代码有可能…以下内容源于朱有鹏《物联网大讲堂》课程的学习如有侵权请告知删除。
一、概念
1竞争状态简称竟态
2临界段某一段代码该代码有可能造成并发因此应该添加锁。这段代码应该尽可能地短、互斥锁、死锁由于互斥锁使用不对导致的后果
3同步与并发多CPU、单cpu下多任务、中断。 二、解决竟态的方法
1原子操作automic_t即不可分割的操作以前认为原子不可以分割 操作要么不开始要么开始后就不会被打断。 2信号量、互斥锁 程序可以休眠即当前代码运行条件不满足因此把cpu交出来等到条件满足时再使用cpu。 3自旋锁 程序不可以休眠不会让出CPU。这段时间很短因此可以等待。23可以“占用篮球场CPU与否”的例子来理解。 三、自旋锁和信号量的使用要点
1自旋锁不能递归 已经拿到自旋锁后不能再次获取该锁。 2自旋锁可以用在中断上下文即中断处理程序信号量不可以因为当运行条件不满足时可能造成睡眠但是在中断上下文中获取自旋锁之前要先禁用本地中断 中断上下文不能使用信号量因为中断上下文不参与调度一旦开始就应该执行完不应该在运行阶段交出cpu。 3自旋锁的核心要求 拥有自旋锁的代码必须不能睡眠要一直持有CPU直到释放自旋锁 4 信号量和读写信号量适合于保持时间较长的情况它们会导致调用者睡眠因此只能在进程上下文使用而自旋锁适合于保持时间非常短的情况它可以在任何上下文使用。如果被保护的共享资源只在进程上下文访问使用信号量保护该共享资源非常合适如果对共享资源的访问时间非常短自旋锁也可以。但是如果被保护的共享资源需要在中断上下文访问包括底半部即中断处理句柄和顶半部即软中断就必须使用自旋锁。自旋锁保持期间是不能被抢占的所谓抢占即优先级比其高而信号量和读写信号量保持期间是可以被抢占的。自旋锁只有在内核可抢占或SMP多处理器的情况下才真正需要在单CPU且不可抢占的内核下自旋锁的所有操作都是空操作。