【项目】解决Linux 定时器各进程同步问题

Linux 定时器同步问题

问题背景:系统进行电池性能测试时,未能满足24h供能。

现象:进入低功耗的系统被A进程持续唤醒。

分析:模块A使用CLOCK_BOOTTIME且写了wake_lock,BSP使用的CLOCK_BOOTTIME_ALARM,唤醒了BSP且wake_lock被占用导致系统无法立即休眠。

根本原因:定时器不同步。

解决方案

现有条件:BSP定时发出UTC时间戳,各进程可订阅,BSP会定时唤醒系统,各进程进行工作。

  • A:进程停止写wake_lock。

    缺点: 存在进程A工作时被系统休眠情况,影响业务。

  • B:订阅BSP的UTC,回调进行时间同步,同时写wake_lock保证不被打断,工作完写wake_unlock。

    缺点:代码改动量大(之前使用的公共库不能继续使用,修改库将影响其他进程使用)

最后选择方案B,并选择add Class代替修改。

新建TimeA类,原Time改继承这个TimeA,对旧代码仅需要新增回调,修改原始继承。

原文地址:https://www.cnblogs.com/yan1345/p/Solution_of_synchronization_of_linux_timer_processes.html