如何制作原子指令

时间:2014-06-05 19:41:03

标签: multithreading delphi synchronization atomic

多线程中的

如果许多线程改变了全局变量的值,(指令在执行过程中)就像这样:

 value:=value+1;

当然这个必须是一个原子指令,那么我应该添加什么来使我的代码原子化呢?

1 个答案:

答案 0 :(得分:4)

在现代Delphi中,您应该使用内在函数AtomicIncrement。 RTL中有一整套这样的函数可以提供原子操作。例如原子交换,原子比较和交换等。

对于您的代码,您可以写:

AtomicIncrement(value);

使用内部函数的好处是编译器在调用站点处内联asm指令。

在旧版本的Delphi中,您应该使用InterlockedIncrement。同样,有一系列类似命名的函数。