我对位段是否是原子段感到困惑。 关于这些论坛似乎有一些相互矛盾的信息,有些文章说它是原子的,另一些则说不是原子的。
例如、该线程表示位段是原子型的:
但是该线程表示位段执行读-修改-写操作:
我需要实现一个"位数组"。 通常情况下、这非常简单、但在这种情况下、可以从主代码和中断中读取和写入位数组、因此会受到损坏: 如果写入位的代码在读取后但在同一字中写入不同位的其他代码写入之前中断、则在早期代码恢复时、对该不同位的更改将丢失。
根据 e2e 上其他地方的文章、位段被认为是原子型的、在这种情况下、位段可用于解决这一腐败问题。 但根据该线程中的帖子,位段执行读-修改-写操作,这表示它可能会损坏-- 除非整个读-修改-写操作是不间断的、或者存在其他 CPU 机制、在中断时、该操作被取消并重新启动(与在某些 CPU 平台中取消和重新启动耗时的 DIV 操作相同、以减少中断延迟)。
因此、了解位段是否是原子段非常重要。 如果多个线程或中断处理程序通过位段访问同一个字中的不同位、是否会发生这种损坏?
当然,我对解决这一问题的其他建议感兴趣。
谢谢