没有特殊的硬件指令,一个代码将如何测试和设置行为?
时间:2020-03-06 14:28:40 来源:igfitidea点击:
我发现大多数实现都需要硬件指令来执行此操作。但是我强烈怀疑这是必需的(如果是这样,我不知道为什么...)
解决方案
如果我们要的是,我们不需要测试和设置指令即可获得互斥锁定。
Dijkstra在1965年描述了我所知道的第一个互斥算法。该论文的标题是"并发编程控制中的问题的解决方案",在Google旁边搜索我们附近的副本。原始算法完全不需要硬件的特殊支持,但是在CPU中提供原子指令可以大大提高性能。
测试设置,原子交换和负载链接+存储条件都是CPU提供的常见原语。全部可用于实现互斥,然后可用于实现所需的任何锁定语义。
如果我们希望使用跨架构的方式来执行此操作,并且正在使用gcc,则可以使用gcc的原子内建函数:
http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html
调用这些将导致当前构建体系结构的硬件特定机器指令。在不支持它们的程序上,编译将失败。 (我认为...)