12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 1999-2001 by the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- type
- IReadWriteSync = interface
- {$ifdef FPC_HAS_FEATURE_THREADING}
- ['{7B108C52-1D8F-4CDB-9CDF-57E071193D3F}']
- procedure BeginRead;
- procedure EndRead;
- function BeginWrite : boolean;
- procedure EndWrite;
- {$endif FPC_HAS_FEATURE_THREADING}
- end;
- TSimpleRWSync = class(TInterfacedObject,IReadWriteSync)
- {$ifdef FPC_HAS_FEATURE_THREADING}
- private
- crit : TRtlCriticalSection;
- public
- constructor Create; virtual;
- destructor Destroy; override;
- function Beginwrite : boolean;
- procedure Endwrite;
- procedure Beginread;
- procedure Endread;
- {$endif FPC_HAS_FEATURE_THREADING}
- end;
- TMultiReadExclusiveWriteSynchronizer = class(TInterfacedObject,IReadWriteSync)
- {$ifdef FPC_HAS_FEATURE_THREADING}
- private
- fThreadList: array [0..15] of Pointer;
- freaderqueue: peventstate;
- fwritelock : TRtlCriticalSection;
- fwaitingwriterlock: prtlevent;
- fWriterThreadID: TThreadID;
- fRevisionLevel: cardinal;
- fwriterequests: cardinal;
- factivethreads: cardinal;
- protected
- function ThreadIDtoIndex( aThreadID: TThreadID ): integer; inline;
- function GetThreadInfo(AutoCreate: Boolean): Pointer;
- procedure RemoveThread(AThreadInfo: Pointer);
- public
- constructor Create; virtual;
- destructor Destroy; override;
- function Beginwrite : boolean;
- procedure Endwrite;
- procedure Beginread;
- procedure Endread;
- property RevisionLevel: cardinal read fRevisionLevel;
- property WriterThreadID: TThreadID read fWriterThreadID;
- {$endif FPC_HAS_FEATURE_THREADING}
- end;
- TMREWException = class(Exception);
|