我有一個多線程的Delphi程序創建了一些類的多個實例,我希望每個類實例都有自己的TMultiReadExclusiveWriteSynchronizer實例,以用於特定屬性的get和set方法。「擁有」TMultiReadExclusiveWriteSynchronizer實例的類實例?
E.g.下面是我在一個類中使用TMultiReadExclusiveWriteSynchronizer其中一個單元的一部分:
interface
TSGThread=class(TThread)
private
fWaiting:boolean;
function getWaiting:boolean;
procedure setWaiting(value:boolean);
public
property waiting:boolean read getWaiting write setWaiting;
end;
implementation
var syncWaiting:TMultiReadExclusiveWriteSynchronizer;
function TSGThread.getWaiting:boolean;
begin
syncWaiting.BeginRead;
result:=fWaiting;
syncWaiting.EndRead;
end;
procedure TSGThread.setWaiting(value:boolean);
begin
syncWaiting.BeginWrite;
fWaiting:=value;
syncWaiting.EndWrite;
end;
initialization
syncWaiting:=TMultiReadExclusiveWriteSynchronizer.Create;
finalization
syncWaiting.Free;
end.
的問題,這是該單位創建TMultiReadExclusiveWriteSynchronizer的一個實例,然後使用TSGThread的多個實例。
同步器只控制對TSGThread的專用字段的訪問。
線程A可以使用公共屬性修改線程B中的字段,因此需要同步器,但每個線程中應該有一個單獨的同步器,以便線程不必在彼此之間等待他們自己的屬性。
德爾福幫助說「創建一個TMultiReadExclusiveWriteSynchronizer的全局實例」,但它是否絕對必須始終是全球?
如果一個類只保護對自己屬性的訪問,那麼同步是否可以在私有字段中使用TMultiReadExclusiveWriteSynchronizer實例?
看到下面的答案後,我已經用私有字段中的同步器成功測試了我的類。 – 2011-05-08 04:07:13