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

.
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top