在多线程中,如果多个线程更改全局变量的值,(指令在执行过程中)如下所示:
value:=value+1;
这肯定是一条原子指令,那么我应该在代码中添加什么来使这条指令成为原子指令?
最佳答案
在现代 Delphi 中,您应该使用内部函数 AtomicIncrement
。 RTL 中有一整套此类函数提供原子操作。例如原子交换、原子比较和交换等。
对于您的代码,您可以编写:
AtomicIncrement(value);
使用内部函数的好处是编译器在调用站点内联 asm 指令。
在旧版本的 Delphi 中,您应该使用 InterlockedIncrement
。同样,有一系列类似命名的函数。
关于multithreading - 如何制作原子指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068868/