这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » Zephyr之线程睡眠与原地等待

共1条 1/1 1 跳转至

Zephyr之线程睡眠与原地等待

高工
2023-08-19 23:25:20     打赏

Zephyr之线程睡眠与原地等待

什么是线程睡眠?

线程可以调用k_sleep()来延迟它的处理过程,直到指定的时间段。在线程休眠期间,CPU被放弃以允许其他准备好的线程执行。一旦指定的延迟时间过了,线程就会准备好,并有资格再次被调度。

典型应用:周期性的对物联网传感器需要采样的物理量进行采集。比如,对当前电流每秒采集1次,则可以k_sleep(1)函数调用实现。

沉睡的线程可以被另一个线程用k_wakeup()提前唤醒。这种技术有时可以用来允许辅助线程向沉睡的线程发出信号,告诉它有事情发生了,而不需要线程定义内核同步对象,比如semaphore。唤醒没有睡眠的线程是允许的,但没有任何效果。

什么是原地等待?

线程可以调用k_busy_wait()来执行繁忙等待,在指定的时间段内延迟其处理,而不把CPU让给其他准备好的线程。

当所需的延迟时间太短,以至于调度器的上下文从当前线程切换到另一个线程,然后再返回时,通常会使用原地等待来代替线程睡眠。

典型应用:在硬件外设模块初始化时,我们需要等待外设模块的ready信号,才能进行下一步的初始化操作。则此时,使用k_busy_wait()来实现延迟效果最佳。





关键词: Zephyr     线程    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]