Domanda

Ho un wrapper di elenco che mantiene due Tstringlist e un TClassList

Ho bisogno che questo sia thread-safe, in modo che:

  • Non sono consentite scritture simultanee (è necessario immettere uno stato di attesa di qualche tipo)
  • La lettura durante la scrittura (o viceversa) non è consentita (deve essere inserito uno stato di attesa di qualche tipo)
  • Letture simultanee sono consentite

Qualche idea su come posso farlo? Il mio istinto mi dice che ha bisogno di qualcosa di più di una semplice sezione critica, forse un semaforo o "contatore di utilizzo", forse uno di questi in congiunzione con un CS.

Non sono proprio sicuro da dove cominciare: qualsiasi cosa, dall'approccio generale in inglese al psuedo-code, all'implementazione di delphi o al collegamento esterno, sarebbe molto apprezzata.

È stato utile?

Soluzione

Dovresti dare un'occhiata alla classe TMultiReadExclusiveWriteSynchronizer dichiarata in sysutils.pas ...

Altri suggerimenti

Dai un'occhiata a questo tutorial. Threading the Delphi Way

Guarda il capitolo 11, ma è tutto roba buona.

Dovresti davvero guardare TThreadList.

I metodi .Add, .Remove, .Clear bloccano automaticamente l'elenco per te. Se necessario, puoi anche bloccare / sbloccare secondo necessità:

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

TMultiReadExclusiveWriteSynchronizer è una grande idea, ma non so se abbiano mai risolto tutti i bug. Ha sempre avuto problemi sotto carico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top