Compartilhar via


Sincronização de Segmento

Enquanto você escreve um aplicativo segmentado, você pode precisar sincronizar segmentos individuais com outras partes do seu programa.Sincronização fornece uma relação de compromisso entre a natureza não estruturada da programação multissegmentada e a ordem estruturada de processamento síncrona.

Você usa técnicas de sincronização:

  • Para controlar explicitamente a ordem na qual o código é executado sempre que tarefas devem ser executadas em uma sequência específica

    - ou -

  • Para evitar que os problemas que podem ocorrer quando dois segmentos compartilham o mesmo recurso ao mesmo tempo.

Por exemplo, você pode usar a sincronização para fazer com que um procedimento de exibição aguarde até que um procedimento de recuperação de dados que está sendo executado em outro segmento seja concluído.

Técnicas de sincronização

Há duas abordagens para sincronização, eleição e uso de objetos de sincronização.Consulte Técnicas de Sincronização Avançada para obter mais informações sobre objetos de sincronização.

Eleição

Eleição verifica repetidamente o status de uma chamada assíncrona de dentro de um loop.Eleição é a maneira menos eficiente para gerenciar segmentos porque ela desperdiça recursos, verificando repetidamente o status das várias propriedades do segmento.

Por exemplo, a propriedade IsAlive pode ser usada quando pesquisando para ver se um segmento foi encerrado.Use essa propriedade com cuidado porque segmento que está ativo não necessariamente está executando.

Você pode usar a propriedade ThreadState da thread para obter informações mais detalhadas sobre o estado de uma thread.Como threads podem ser em mais de um estado em um determinado momento, o valor armazenado em ThreadState pode ser uma combinação dos valores na enumeração System.Threading.ThreadState.Consequentemente, você deverá verificar cuidadosamente todos os estados relevantes da thread quando pesquisando.Por exemplo, se um estado da thread indica que ela não está Running, ele pode ser feito.Por outro lado, ela pode estar suspensa ou adormecida.

Aguardando um Segmento para Concluir

O método Thread.Join é útil para determinar se uma thread foi concluída antes de iniciar outra tarefa.O método Join aguarda um determinado período de tempo para uma thread finalizar.Se a thread terminar antes do tempo limite, Join retornará True; caso contrário, retornará False.

Como você pode imaginar, eleição sacrifica muitas das vantagens de multithreading no returno para controle sobre a ordem que o segmento executa.Como é ineficiente, eleição não é geralmente recomendado.Uma abordagem mais eficiente usaria o Join método para controle de segmentos. Join causa um procedimento de telefonar aguardar até que um segmento seja terminado ou até que a telefonar expire se um time limite é especificado. O nome " join " é baseado na ideia de que criar um novo segmento é uma bifurcação no caminho execução.Você usa Join para mesclar caminhos separados de execução em uma única thread novamente.

Figura 1 Segmentação

Um ponto deve estar claro: Join é um síncrono ou o bloqueio telefonar.Uma vez que você chama Join, ou um método de espera de um tratador de espera, o procedimento de chamada para e aguarda a thread sinalizar que isso está terminada.

Sub JoinThreads()
    Dim Thread1 As New System.Threading.Thread(AddressOf SomeTask)
    Thread1.Start()
    Thread1.Join()      ' Wait for the thread to finish.
    MsgBox("Thread is done")
End Sub
Sub SomeTask()
    ' Insert code to perform a task here.
End Sub

Essas formas simples de controlar segmentos, que são úteis quando você estiver gerenciando um pequeno número de segmentos, são difíceis de usar com projetos grandes.Técnicas de Sincronização Avançada discute algumas técnicas que você pode usar para sincronizar segmentos.

Consulte também

Conceitos

Multithreading Avançado com Visual Basic

Parâmetros e Valores de Retorno para os Procedimentos Multisegmentados

Outros recursos

Multisegmentação no Visual Basic