Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.743 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Synchronisierung zwischen Threads ohne Mutex

  Alt 29. Jan 2025, 23:27
Du musst lediglich ein Objekt angeben, das für die Identifizierung der Sperre verwendet wird. Da es hier um Zugriffe auf eine Liste geht, bietet es sich an, diese auch zu verwenden.
Delphi-Quellcode:
  TMonitor.Enter(MyList);
  try
    MyList.Add(42);
  finally
    TMonitor.Exit(MyList);
  end;
Entsprechend mit Angabe des Starts und Endes des Blocks funktionieren auch die andere Varianten wie z.B. TLightweightMREW:
Delphi-Quellcode:
var
  Lock: TLightweightMREW;
  Test: Integer;
begin
  Lock.BeginWrite; // Schreibzugriff anfordern
  try
    MyList.Add(42);
  finally
    Lock.EndWrite;
  end;

  Lock.BeginRead; // Lesezugriff anfordern
  try
    Test := MyList[0];
  finally
    Lock.EndRead;
  end;
Wichtig ist try..finally, um sicherzustellen, dass auch bei einem Fehler die Sperre wieder aufgehoben wird.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (30. Jan 2025 um 07:05 Uhr)
  Mit Zitat antworten Zitat