在阅读了许多有关编程中的获取发布语义的博客之后,我仍然无法理解。我了解的是,“获取”和“释放”操作均暗示了内存障碍。我的印象是,阻止了编译器(可能还有CPU)在“获取”操作之前和“释放”操作之后对任何指令重新排序。到现在为止还挺好。现在混乱开始了。
困惑1:从这个blog的角度出发,我的理解是获取释放语义很重要。无锁编程。但是,this博客实质上实现了互斥锁,并声称它符合获取释放语义-这使我们回到了平方。
困惑2: This博客说。
获取语义是只能应用于以下操作的属性: 从共享内存读取,是否为读-修改-写操作 或普通负载。然后,该操作被视为读取获取。
发布语义是只能应用于以下操作的属性: 写入共享内存,无论它们是读-修改-写操作 或普通商店。然后将该操作视为写释放。
为什么将同一读写修改操作视为同时获取和释放?
困惑3:获取释放语义与内存障碍有什么不同吗?
困惑4:除了强制执行synchronizes-with关系之外,获取发布语义是否还有其他用例?