在全局变量被并发访问的场景中不同内核上的多个线程,考虑使用原子和易失性的影响至关重要
Volatile 关键字
易失性关键字可确保编译器不会针对变量优化内存操作,从而导致处理器始终直接从内存中读取值。然而,虽然 volatile 保证直接内存访问,但它并不意味着原子访问。
原子数据类型
标准 C 11 包括表示为 的原子数据类型。这些类型提供原子操作,这意味着每个操作都保证在不受其他线程干扰的情况下执行。这可以确保无论缓存不一致如何,始终读取最新值。
在没有额外同步(例如锁)的情况下,共享全局变量表现出可见性和排序由操作中使用的内存排序参数确定的约束。虽然默认排序 () 建立了单个总顺序,但仍可能会观察到过时的值。
但是,读取-修改-写入操作(例如 )保证该操作是始终按最新值执行。这确保了对同一变量的连续读取-修改-写入操作将返回一系列唯一且有序的值。
虽然易失性变量可确保直接内存访问,但它们不保证原子性运营。为了对共享变量进行可靠和并发的访问,原子数据类型 () 应与适当的同步原语结合使用,以确保正确的程序行为。
以上是C 11 并发性:什么时候应该使用原子变量和易失性变量?的详细内容。更多信息请关注PHP中文网其他相关文章!