我声明了两个全局变量:
var
gIsRunning: Boolean = False;
gLogCounter: Integer = 0;
这些变量仅在主线程中写入,并在其他线程中读取。在这种情况下,这些变量线程安全吗?
最佳答案
您可能说的是原子变量。整数和 bool 变量是原子变量。 bool 值(字节)始终是原子的,整数(32 位)是原子的,因为编译器会正确对齐它们。
原子性是指任何读或写操作都是作为一个整体执行的。如果线程A同时对同一个数据执行原子写入和线程B原子读取,则线程B读取的数据始终是一致的——线程B读取的某些位不可能从当前的写入操作中获得并且来自先前写入的一些位(由线程 A)
但是原子性并不意味着线程安全——您可以轻松地使用原子变量编写不安全的代码。变量本身不能是线程安全的 - 只有整个代码可以是(或不是)线程安全的。
关于multithreading - Delphi简单类型线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5481030/