200分 --->多线程调用同一个函数的安全问题<--- 200分
我写了这样一个函数:
function Test( s:string ):Pointer;
var
ary : array [0..255] of char;
begin
strpcopy( ary, s );
result := @ary[0];
end;
问题是,如果多个线程同时调用函数Test的话会不回发生冲突?
我做的实验,在每一个线程中调用Test函数,所有线程调用Test函数的返回值是固定的,也就是说多个线程访问的是同一片内存。
“这个问题好象是有些让人迷惑。因为我没做过具体的测试。如果是线程局部变量的话,他们都有各自的副本,是互不干扰的。但现在是函数内变量,(这个函数应该看做是全局变量),而不是线程内变量。从汇编级来看的话。是不是可以这样来看????
每个线程都是 call test。test是同一个,只不过它被多个线程调用,只有一个TEST存在的话,那么 ARY 肯定也就是 分配在一个固定的地方。基于这个想法,ARY应该是分配在同一个栈空间上。不知道对不对。我自己也很怀疑。”