我发现的大多数实现都需要硬件指令才能执行此操作。但是我强烈怀疑这是必需的(如果是的话,我无法弄清楚为什么......)

有帮助吗?

解决方案

如果那就是你所要求的,你不需要测试和设置指令来获得互斥锁定。 Dijkstra在1965年描述了我所知道的第一个互斥算法。该论文的标题是“并发编程控制中的问题解决方案”,在谷歌搜索你附近的副本。原始算法根本不需要硬件的特殊支持,但在CPU中提供原子指令可以显着提高性能。

测试和设置,原子交换和加载链接+存储条件都是CPU提供的常见原语。所有这些都可用于实现互斥,然后可以使用它来实现您想要的任何锁定语义。

其他提示

如果您想要一种跨拱方式,并且正在使用gcc,那么您可以使用gcc的原子内置:

http://gcc.gnu.org/onlinedocs/gcc/Atomic -Builtins.html

调用这些将导致针对当前构建体系结构的硬件特定机器指令。在那些不支持它们的程序中,编译将失败。 (我想......)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top