Question

J'ai un wrapper de liste qui gère deux listes Tstring et une liste TClassList

J'ai besoin que cela soit thread-safe, tel que:

  • Les écritures simultanées ne sont pas autorisées (un état d'attente quelconque doit être entré)
  • La lecture en cours d'écriture (ou inversement) n'est pas autorisée (vous devez entrer un état d'attente quelconque)
  • Les lectures simultanées sont autorisées

Des idées sur la façon dont je peux faire cela? Mon instinct me dit que cela nécessite plus qu'une section critique, peut-être un sémaphore ou un "compteur d'utilisation", peut-être une de celles-ci en conjonction avec un CS.

Je ne sais tout simplement pas par où commencer - quelque chose d'une approche globale en anglais au code de séquence, à la mise en œuvre de Delphi ou à un lien externe serait très apprécié.

Était-ce utile?

La solution

Vous devriez jeter un coup d'œil à la classe TMultiReadExclusiveWriteSynchronizer déclarée dans sysutils.pas ...

Autres conseils

Consultez ce didacticiel. Enfiler à la manière Delphi

Regardez le chapitre 11, mais tout est bon.

Vous devriez vraiment regarder TThreadList.

Les méthodes .Add, .Remove, .Clear verrouillent automatiquement la liste pour vous. Si nécessaire, vous pouvez également verrouiller / déverrouiller selon vos besoins:

x.LockList; 
try 
  //do whatever
finally  
  x.Unlocklist; 
end;

TMultiReadExclusiveWriteSynchronizer est une idée géniale, mais je ne sais pas s'ils ont déjà résolu tous les problèmes. Il a toujours eu des problèmes sous la charge.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top