在一个多任务系统中存在如下的潜在问题:非原子操作。当一个任务在访问一个资源,且尚未完成一次访问,此时被调度退出运行态,另一个任务/中断进入访问这个资源将会产生一些意想不到的问题。一些典型的例子如:
- 访问外设,比如写LCD
- 任务A执行写”I love you”到LCD
- 在写到”I ”之后,任务A被任务B抢占
- 任务B写”do not”到LCD
- 切换回任务A继续执行继续之前的上下文操作
LCD输出内容将会是:”I do not love you”
- 读、修改、写操作
这个操作是非原子的,因为它会先读、再改、再写,这些指令都是分开的、可被中断的,
- 对变量的非原子访问
比如在一个16位机器上,实现一个32位的变量的访问
- 函数可重入性