Haskell中获取系统时间时同步硬件时钟是否会引发严重问题?
解答
你担心的并发操作冲突不会引发任何严重问题,具体原因如下:
- 你在子线程执行的
hwclock --systohc命令,作用是把操作系统维护的系统时间写入硬件时钟,整个执行过程不会修改系统时间的值。而主线程的getCurrentTime读取的是系统时间,二者操作的对象完全独立,不存在读写竞争的可能。 - 即便后续你调整逻辑为从硬件时钟同步修改系统时间(即执行
hwclock --hctosys),也不会出现严重问题:getCurrentTime是操作系统提供的原子系统调用,内核会保证读取到的时间值是合法完整的,最多可能出现两次读取时间跳变的情况,不会出现程序崩溃、返回非法时间值这类故障。 - 额外补充代码优化建议:
fromJust在parseISO8601解析失败时会直接抛出异常导致程序退出,建议改为模式匹配处理解析失败的分支;threadDelay的计时受系统调度影响存在少量误差,对时间精度要求高的场景可替换为更精准的定时器实现。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

