Exemplo de tecnologia de sincronização de leitor-gravador
Esse exemplo demonstra o uso do ReaderWriterLock classe de sincronização de thread. A funcionalidade do ReaderWriterLock tipo permite que o desenvolvedor escreva código que impõe o acesso exclusivo a um recurso compartilhado ao mesmo tempo um thread é escrita ou modificando o recurso, mas permite acesso não-exclusivo ao ler ou consultar o recurso.
Para obter mais informações sobre como usar os exemplos, consulte os seguintes tópicos:
Para compilação a amostra usando o aviso de comando
Abrir um janela do aviso de comando e navegar até um de subpastas específicas do linguagem para a amostra.
Tipo de MSBuild ReaderWriterSynchronizationCS.sln or MSBuild ReaderWriterSynchronizationVB.sln, dependendo de sua escolha de linguagem de programação, na linha de comando.
Para compilação a amostra usando o Visual Studio
em aberto Windows Explorer e navegar até um de subpastas específicas do linguagem para a amostra.
clicar duas vezes no ícone de ReaderWriterSynchronizationCS.sln or ReaderWriterSynchronizationVB.sln, dependendo de sua escolha de linguagem, de programação para em em aberto o arquivo no Visual Studio.
Sobre o Compilação menu, clicar Criar solução.
Para executar este exemplo
navegar até o diretório que contém o novo arquivo executável.
Tipo de ReaderWriter.exe na linha de comando.
Observação: Este exemplo cria um aplicativo de console.Você deve iniciá-la no aviso de comando para exibir sua saída.Ao executar o exemplo, observe que o Iniciar gravação and Parar gravação saída para cada gravador ocorre sucessivamente.Isso ocorre porque os gravadores Isenção acesso exclusivo ao recurso, ao contrário dos leitores.
Comentários
Para obter mais informações sobre thread sincronização e acesso exclusivo, consulte os comentários nos arquivos de código e compilação.proj de fonte.
Os marcadores a seguintes faça uma breve descrição de classes e tecnologias usadas por este exemplo.
- Sincronização de Segmento
ReaderWriterLockUsado para proteger um recurso lógico que é implementado sistema autônomo uma telefonar para Sleep. Segmentos usando o ReaderWriterLock tipo pode Isenção o bloquear de duas maneiras diferentes. Primeiro, um thread pode conter um bloquear de leitura, que é não-exclusiva e permitirá que outros segmentos obter um bloquear de leitura para a classe.Segundo, um thread pode solicitar um bloquear de gravar, que é exclusivo e não é concedido até mantido atualmente leitura e bloqueios de gravar são lançados.
AutoResetEventSegmento principal dos exemplos espera por um AutoResetEvent objeto até que ela seja conjunto, que indica que concluíram a última das funções assíncrono fazendo seu trabalho.
InterlockedO exemplo usa o estático Interlocked.Increment e Interlocked.Decrement métodos para acessar uma variável de contador para indicar quando assincronamente a AutoResetEvent deve ser definido.
Threading
- ThreadPool Ao escrever código gerenciado, é recomendável que sempre que possível, os desenvolvedores usar o QueueUserWorkItem método para implementar chamadas de método assíncrono. Este exemplo usa essa abordagem para executar o código que concorre para um recurso lógico.
Delegados
- WaitCallback Usado para criar um método de retorno de chamada de fortemente tipado para o ThreadPool classe a ser usada.