Como posso implementar uma lista invólucro thread-safe em Delphi?
-
08-07-2019 - |
Pergunta
Eu tenho um invólucro lista que mantém dois Tstringlists e uma TClassList
Eu preciso disso para ser thread-safe, de tal forma que:
- escritas concorrentes não são permitidos (estado de espera de algum tipo deve ser inserido)
- Reading enquanto que a escrita (ou vice-versa) não é permitido (estado de espera de algum tipo deve ser inserido)
- Concurrent lê são permitido
Algumas ideias sobre como eu posso fazer isso? Meu instinto me diz que precisa de mais do que apenas uma seção crítica, talvez um semáforo ou "contador de utilização", talvez um destes em conjunto com um CS.
Eu apenas não estou muito certo por onde começar - qualquer coisa de uma abordagem global em Inglês para pseudo-código, a aplicação delphi ou link externo seria muito apreciada
.Solução
Você deve ter um olhar para a classe TMultiReadExclusiveWriteSynchronizer declarou em SysUtils.pas ...
Outras dicas
Tenha um olhar para este tutorial. Enfiar a Via Delphi
Olhe para o Capítulo 11, mas é tudo coisas boas.
Você realmente deve olhar para TThreadList.
Os métodos .Add, .Remover, .Clear bloquear automaticamente a lista para você. Se necessário, você também pode bloquear / desbloquear conforme necessário:
x.LockList;
try
//do whatever
finally
x.Unlocklist;
end;
TMultiReadExclusiveWriteSynchronizer é uma grande idéia, mas eu não sei se eles nunca sanadas todos os erros fora. Ele sempre teve problemas em carga.