gpt4 book ai didi

delphi - AtomicCmpExchange 在所有平台上都可靠吗?

转载 作者:行者123 更新时间:2023-12-03 14:41:18 25 4
gpt4 key购买 nike

我找不到AtomicCmpExchange的实现(似乎是隐藏的),所以我不知道它是做什么的。

AtomicCmpExchange 在所有平台上都可靠吗?内部是如何实现的?它使用类似关键部分的东西吗?

我有这样的场景:

主线程:

Target := 1;

主题1:

x := AtomicCmpExchange(Target, 0, 0);

线程2:

Target := 2;

线程3:

Target := 3;

x 总是整数 1、2 或 3,还是其他值?我的意思是,即使 AtomicCmpExchange(Target, 0, 0) 未能交换值,它是否返回一个“有效”整数(我的意思是,不是半读整数,例如,如果另一个线程已经开始写入该值的一半)?

我想避免使用关键部分,我需要最大速度。

最佳答案

AtomicCmpExchange 就是所谓的 intrinsic routine, or a standard function 。它本质上是编译器已知的,并且可能有也可能没有可见的实现。例如,Writeln 是一个标准函数,但您找不到它的单个实现。编译器将其分解为对 System.pas 中较低级别函数的多次调用。某些标准函数,例如 Inc()Dec() 在 System.pas 中没有任何实现。编译器将生成相当于简单 INCDEC 指令的机器指令。

Inc()Dec() 一样,AtomicCmpExchange() 是使用给定平台所需的任何代码来实现的。它将生成内联指令。对于 x86/x64,它将生成 CMPXCHG 指令(以及将变量/值放入寄存器所需的任何设置)。对于 ARM,它将围绕 LDREXSTREX 指令生成更多指令。

因此,您的问题的直接答案是,即使调用汇编代码,也无法比使用该标准函数与其他函数(例如 AtomicIncrementAtomicDecrement 等)更高效。 > 和 AtomicExchange

关于delphi - AtomicCmpExchange 在所有平台上都可靠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40071010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com