如果许多线程改变了全局变量的值,(指令在执行过程中)就像这样:
value:=value+1;
当然这个必须是一个原子指令,那么我应该添加什么来使我的代码原子化呢?
答案 0 :(得分:4)
在现代Delphi中,您应该使用内在函数AtomicIncrement
。 RTL中有一整套这样的函数可以提供原子操作。例如原子交换,原子比较和交换等。
对于您的代码,您可以写:
AtomicIncrement(value);
使用内部函数的好处是编译器在调用站点处内联asm指令。
在旧版本的Delphi中,您应该使用InterlockedIncrement
。同样,有一系列类似命名的函数。