【发布时间】:2011-08-16 15:11:26
【问题描述】:
这段代码
procedure MyThreadTestA(const AStr: string);
比
快procedure MyThreadTestB(AStr: string);
在做同样的工作时,两者都传递了一个指针。
但是,B 版“正确”更新了AStr 的引用计数,并在我更改时复制它。
版本 A 只传递一个指针,只有编译器阻止我更改 AStr。
如果我在 Assembler 中使用肮脏的技巧或以其他方式规避编译器保护,版本 A 是不安全的,这是众所周知的,但是...
通过引用传递AStr 作为const 参数线程安全吗?
如果AStr 在其他线程中的引用计数变为零并且字符串被破坏,会发生什么?
【问题讨论】:
-
如果引用计数在另一个线程中变为零,那么引用计数一开始就是错误的。如果两段代码都可以修改同一个字符串,那么字符串的引用计数应该大于 1,因为显然有多种方法可以引用该字符串。每个线程都应该有自己的独立变量来引用字符串,否则应该使用通常的同步技术来保护共享变量。
-
非常好的问题。我今天学到了一些东西。
标签: string delphi parameters constants