diff --git a/fcl/inc/syncob.inc b/fcl/inc/syncob.inc index 6cc38e0c4d..339322e448 100644 --- a/fcl/inc/syncob.inc +++ b/fcl/inc/syncob.inc @@ -30,3 +30,35 @@ procedure TCriticalSection.Leave; begin Release; end; + +constructor TMultiReadExclusiveWriteSynchronizer.Create; + +begin + Crit:=tcriticalsection.create; +end; + +destructor TMultiReadExclusiveWriteSynchronizer.Destroy; +begin + Crit.free; +end; + +procedure TMultiReadExclusiveWriteSynchronizer.Beginwrite; +begin + Crit.acquire; +end; + +procedure TMultiReadExclusiveWriteSynchronizer.Endwrite; +begin + Crit.release; +end; + +procedure TMultiReadExclusiveWriteSynchronizer.Beginread; +begin + Crit.acquire; +end; + +procedure TMultiReadExclusiveWriteSynchronizer.Endread; +begin + Crit.acquire; +end; + diff --git a/fcl/inc/syncobh.inc b/fcl/inc/syncobh.inc index ffa34122bb..cdd10bcd18 100644 --- a/fcl/inc/syncobh.inc +++ b/fcl/inc/syncobh.inc @@ -62,3 +62,15 @@ type TSimpleEvent = class(TEventObject) constructor Create; end; + + TMultiReadExclusiveWriteSynchronizer = class + private + crit:TCriticalsection; + public + constructor Create; virtual; + destructor Destroy; override; + procedure Beginwrite; + procedure Endwrite; + procedure Beginread; + procedure Endread; + end;