笔者在项目开发过程中遇到如下问题:
理论解释
“scheduling while atomic”
这是一个常见的编程概念,它指的是在原子操作中进行调度或处理任务。原子操作是指在执行期间不能被中断的操作。
在多线程或并发编程中,当一个线程正在执行原子操作期间,另一个线程通常不能进行调度,即不能在原子操作期间对该线程进行上下文切换。这是为了确保原子操作能够正确和完整地执行,避免出现数据竞争等问题。
如果在执行原子操作期间进行调度,可能会破坏原子性,导致数据一致性问题或其他异常。因此,编程的时候需要特别注意避免在原子操作中进行调度。
自旋锁
此处保存链接: 自旋锁详细解释
问题原因
结合起来,简单来说,就是自旋锁启动和释放过程中,应该保证整个过程是原子操作(即不可被中断),笔者的项目在启动自旋锁后,进行了写文件操作,写文件需要启动线程,于是无法保证自旋锁完整的执行,被写文件操作中断。
解决办法
定位到问题原因就非常好解决了,只需要在写文件之前释放自旋锁即可。
结论
对操作系统有了实践性的了解,对于原子操作,自旋锁,互斥锁等原理的理解更深入。