X
xiaohongna
Unregistered / Unconfirmed
GUEST, unregistred user!
首先我提出这个问题是在TThread类里面
procedure TThread.Terminate;
begin
FTerminated := True;
end;
也就是说这个方法直接写了一个变量的值。 由于我在写得时候也用了同样的方法,就是对一个变量的读或者写不考虑线程安全问题,仅仅局限于一次读或者写操作。
但是现在问题出来了,这中用法到底安全不安全啊?也就是到底有没有可能同时对一个8位 或者 32位的内存进行读写两个操作那?
我查了一些资料,只有只言片语说了在Win上面对一个8位的读或者写都是原子性的。但并不是说就是线程安全的阿? 我还询问了一个多年经验的人,他说同时读写两个操作同一块内存可能发生,他还说TThread这种写法就是有Bug。
但还有一些人说硬件上面这种情况不会发生。我也不清楚硬件。 但是通过设置一个变量的值来在多个线程之间使用却是经常用的,今天突然想不明白了,越想越糊涂!
procedure TThread.Terminate;
begin
FTerminated := True;
end;
也就是说这个方法直接写了一个变量的值。 由于我在写得时候也用了同样的方法,就是对一个变量的读或者写不考虑线程安全问题,仅仅局限于一次读或者写操作。
但是现在问题出来了,这中用法到底安全不安全啊?也就是到底有没有可能同时对一个8位 或者 32位的内存进行读写两个操作那?
我查了一些资料,只有只言片语说了在Win上面对一个8位的读或者写都是原子性的。但并不是说就是线程安全的阿? 我还询问了一个多年经验的人,他说同时读写两个操作同一块内存可能发生,他还说TThread这种写法就是有Bug。
但还有一些人说硬件上面这种情况不会发生。我也不清楚硬件。 但是通过设置一个变量的值来在多个线程之间使用却是经常用的,今天突然想不明白了,越想越糊涂!