【发布时间】:2014-07-26 23:00:35
【问题描述】:
在多线程中,如果多个线程改变一个全局变量的值,(指令在执行过程中)像这样:
value:=value+1;
肯定这个必须是原子指令,那么我应该在我的代码中添加什么来使这个指令成为原子指令?
【问题讨论】:
-
value变量的类型是什么? -
对于原子增量(您已在代码中显示)使用
TInterlocked.Increment。还有其他功能,如TInterlocked.Decrement用于递减,或TInterlocked.Exchange用于价值交换等。 -
处理这种情况的另一种方法是首先避免共享。停止使用全局变量。将变量保持在本地。有时你需要分享,但如果可以避免,通常应该避免。
-
好的,在这种情况下我需要分享一下,是否有另一个函数可以使任何指令原子化,而不仅仅是递增,我该如何接受答案,我该怎么办?
-
您不能使任何指令原子化。只有那些可以合理实施的。 AtomicXXX 系列是具有硬件支持的系列。对于更复杂的操作,您需要使用锁。
标签: multithreading delphi synchronization atomic