systhrdh.inc 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. {%MainUnit sysutils.pp}
  2. {
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2001 by the Free Pascal development team
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. type
  12. IReadWriteSync = interface
  13. {$ifdef FPC_HAS_FEATURE_THREADING}
  14. ['{7B108C52-1D8F-4CDB-9CDF-57E071193D3F}']
  15. procedure BeginRead;
  16. procedure EndRead;
  17. function BeginWrite : boolean;
  18. procedure EndWrite;
  19. {$endif FPC_HAS_FEATURE_THREADING}
  20. end;
  21. TSimpleRWSync = class(TInterfacedObject,IReadWriteSync)
  22. {$ifdef FPC_HAS_FEATURE_THREADING}
  23. private
  24. crit : TRtlCriticalSection;
  25. public
  26. constructor Create; virtual;
  27. destructor Destroy; override;
  28. function Beginwrite : boolean;
  29. procedure Endwrite;
  30. procedure Beginread;
  31. procedure Endread;
  32. {$endif FPC_HAS_FEATURE_THREADING}
  33. end;
  34. TMultiReadExclusiveWriteSynchronizer = class(TInterfacedObject,IReadWriteSync)
  35. {$ifdef FPC_HAS_FEATURE_THREADING}
  36. private
  37. fThreadList: array [0..15] of Pointer;
  38. freaderqueue: peventstate;
  39. fwritelock : TRtlCriticalSection;
  40. fwaitingwriterlock: prtlevent;
  41. fWriterThreadID: TThreadID;
  42. fRevisionLevel: cardinal;
  43. fwriterequests: cardinal;
  44. factivethreads: cardinal;
  45. protected
  46. function ThreadIDtoIndex( aThreadID: TThreadID ): integer; inline;
  47. function GetThreadInfo(AutoCreate: Boolean): Pointer;
  48. procedure RemoveThread(AThreadInfo: Pointer);
  49. public
  50. constructor Create; virtual;
  51. destructor Destroy; override;
  52. function Beginwrite : boolean;
  53. procedure Endwrite;
  54. procedure Beginread;
  55. procedure Endread;
  56. property RevisionLevel: cardinal read fRevisionLevel;
  57. property WriterThreadID: TThreadID read fWriterThreadID;
  58. {$endif FPC_HAS_FEATURE_THREADING}
  59. end;
  60. TMREWException = class(Exception);