multithreading - 如何制作原子指令

标签 multithreading delphi synchronization atomic

在多线程中,如果多个线程更改全局变量的值,(指令在执行过程中)如下所示:

 value:=value+1;

这肯定是一条原子指令,那么我应该在代码中添加什么来使这条指令成为原子指令?

最佳答案

在现代 Delphi 中,您应该使用内部函数 AtomicIncrement 。 RTL 中有一整套此类函数提供原子操作。例如原子交换、原子比较和交换等。

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

AtomicIncrement(value);

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

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

关于multithreading - 如何制作原子指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068868/

相关文章:

按下后退按钮后android线程仍在运行

c# - async await是否增加上下文切换

c++ - 如何在Qt中实现倒计时锁存器?

c++ - C++ Builder将TIBQuery转换为TIBTable

go - 如何与 time.After 进行惯用同步?

mongodb - Mongoose JS promise ?或者如何管理批量保存

java - Netbeans GUI 和处理 "main"内的线程

c# - 代码示例被证明在没有 volatile 的情况下会失败

delphi - 有标准的非模式消息对话框吗?

delphi - 如何计算文本文件中包含多个空格字符的所有单词