线程问题:请问我下面这个线程函数是线程安全的吗?(100分)

L

lgh200

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TUServerClientThread.MakeSaveInfoBuf(P: PSocketData;
var SendBuf: TSendBuf;
var SendSize: Integer);
var
s:string;
X,Len:Integer;
begin
MakeVerbBuf(vcSaveInfo,SendBuf,SendSize);
S:=P^.SrcFileName + '|' +
p^.DstFileName + '|' +
IntToStr(P^.FileSize) +'|';
Len :=Length(s);
for x:=1 to lendo
SendBuf[LeadLen+X-1] :=S[x];
SendSize :=LeadLen+Len;
end;

我创建了两个相同的线程,同时调用上面这个函数是出现了下面的错误:
access violiation at address 004337a4 in module porject1.exe
write of address 000000004
 
应该使用线程同步吧,用临界或互斥来保护执行代码.
 
这个我知道,我只是觉得这段代码应该不存在同步问题,我用的都是私有变量和函数的参数。
是不是IntToStr函数或者,length函数是线程不安全的。
 
你创建了两个相同的线程,变量P是否是两个线程都访问的变量。如果是,则会冲突。
 
变量P是线程私有变量。
 
同意duguqiubai的
而且变量P要拷贝下来就更有效率和更安全
 
出错的可能是因为指针P失效了。
MakeVerbBuf 是什么代码?
另外,你线程是怎么调用这段代码的?
 
加个互斥或则临界区就可以了。
 
线程安全如何判断?
多个线程访问同一个全局变量,只是读取,不写入,这样算不算线程安全?
我试过,是可以的!
 
顶部