Sto lavorando con thread e questo è il motivo per cui uso mutex per bloccare le risorse condivise. L'utilizzo di base del blocco consiste nel mettere le risorse all'interno del blocco Blocco/sblocco.Blocco e sblocco risorse con comando singolo
procedure RefreshData;
begin
DataLock;
GetData;
GetSettings;
CheckValues;
...
DataUnlock;
end;
Perché c'è sempre un paio di blocco/sblocco ho iniziato a pensare di blocco semplificato/sblocco approccio che sarebbe automatico sbloccare queste risorse quando non serve più.
Quindi la mia idea era di introdurre una nuova procedura che avrebbe preso come parametro di input un riferimento alla precedenza. Questo mi darà la possibilità di usare un metodo anonimo.
codice sarebbe qualcosa di simile:
type TBaseProc = reference to procedure;
procedure TMyObject.LockMethod(AMeth: TBaseProc);
begin
DataLock;
try
AMeth;
finally
DataUnlock;
end;
end;
procedure TForm1.RefreshData;
begin
MyObject.LockMethod(
procedure
begin
GetData;
GetSettings;
CheckValues;
...
end;
);
end;
ha questo approccio alcun senso o c'è o meglio ancora più semplice soluzione a questo?
Grazie e saluti.
Ti interessano le prestazioni o no? –
La soluzione più semplice sarebbe se il compilatore avesse il supporto nativo per l'istruzione Lock() come in C#: http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx. Personalmente utilizzo modelli di codice per coppie di lock/unlock. –
@David: Sì, mi preoccupo delle prestazioni. C'è qualche stima su quanto sovraccarico potrebbe causare questo approccio? Immagino che la coppia Lock/Unlock sia ancora un approccio migliore in termini di prestazioni. – Nix