multithreading - Delphi简单类型线程安全吗?

标签 multithreading delphi thread-safety

我声明了两个全局变量:

var
  gIsRunning: Boolean = False;
  gLogCounter: Integer = 0;

这些变量仅在主线程中写入,并在其他线程中读取。在这种情况下,这些变量线程安全吗?

最佳答案

您可能说的是原子变量。整数和 bool 变量是原子变量。 bool 值(字节)始终是原子的,整数(32 位)是原子的,因为编译器会正确对齐它们。

原子性是指任何读或写操作都是作为一个整体执行的。如果线程A同时对同一个数据执行原子写入和线程B原子读取,则线程B读取的数据始终是一致的——线程B读取的某些位不可能从当前的写入操作中获得并且来自先前写入的一些位(由线程 A)

但是原子性并不意味着线程安全——您可以轻松地使用原子变量编写不安全的代码。变量本身不能是线程安全的 - 只有整个代码可以是(或不是)线程安全的。

关于multithreading - Delphi简单类型线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5481030/

相关文章:

java - 将数组作为线程安全参数传递时出现 ActionListener 错误

java - 如何以定义明确的线程安全方式将 C++ 字符串传递给 Java JNI?

delphi - Delphi中单独线程中运行WebService的问题

java - java中的跨类同步

java - 如何停止当前线程直到其他线程完成执行?

c# - 当ThreadPool构造新线程而不是重用它们时?

delphi - 为什么 Windows 7 上的 FindFirstFile/FindNextFile 没有列出系统目录的全部内容?

delphi - 三重等式表达式求值

c# - 如何调用具有某种优先级的异步方法?

delphi - 如何确保参数已在数据集提供程序中更新