在此代碼:TThread線程安全嗎?
TMyClass = class(TThread)
public
FInputBuffer : TThreadedQueue<TBytes>;
protected
procedure Execute; override;
end;
是否使用(在TMyClass和其他類)FInputBuffer的是線程安全的?
編輯:
樣品用途:TMyClass:
procedure TMyClass.Execute;
var x :TBytes;
begin
inherited;
FInputBuffer:= TThreadedQueue<TBytes>.Create;
while not Terminated do begin
if FInputBuffer.QueueSize > 0 then begin
x:= FInputBuffer.PopItem;
//some code to use x
end;
end;
FInputBuffer.Free;
end;
在其他類:
var MyClass :TMyClass ;
procedure TForm1.btn1Click(Sender: TObject);
var x :TBytes;
begin
//set x
MyClass.FInputBuffer.PushItem(x);
end;
1.您必須定義線程安全的含義。有很多方法可以解釋這個術語。 2.即使我們知道您的線程安全意味着什麼,您也沒有顯示您的其他代碼,但我們很難判斷其他代碼是否符合該要求。 – 2013-05-07 18:20:20
對我來說一個規則:公共領域是**從不**線程安全,因爲公共寫入訪問 – 2013-05-07 21:15:29