我有一个继承自TThread的类。我有一些只读的公共属性。如果我的主线程在线程活动时读取这些值,会遇到问题吗?
我有一个继承自TThread的类。我有一些只读的公共属性。如果我的主线程在线程活动时读取这些值,会遇到问题吗?
Integer
、Boolean
、Char
和Pointer
可以随时安全读取。引用类型,如string
、接口和动态数组,只有在没有其他线程同时分配新值的情况下才能安全读取。例如,使用关键部分或Synchronized
方法来确保主线程读取时线程不会修改值。type
TMyThread = class(TThread)
private
FIntfield: integer;
public
property IntField: integer read FIntField;
end;
访问此属性不会有问题,因为访问32位值是原子操作。但如果属性大于32位或类引用可能在主线程访问时更改,则会遇到问题。