Partilhar via


Objetos de sincronização

Um objeto de sincronização é um objeto cujo identificador pode ser especificado em uma das funções de espera para coordenar a execução de vários threads. Mais de um processo pode ter um identificador para o mesmo objeto de sincronização, tornando possível a sincronização entre processos.

Os seguintes tipos de objeto são fornecidos exclusivamente para sincronização.

Tipo Descrição
Evento Notifica um ou mais threads em espera de que um evento ocorreu. Para obter mais informações, consulte Event Objects.
Mutex Pode pertencer a apenas um thread de cada vez, permitindo que os threads coordenem o acesso mutuamente exclusivo a um recurso compartilhado. Para obter mais informações, consulte Mutex Objects.
Semáforo Mantém uma contagem entre zero e algum valor máximo, limitando o número de threads que estão acessando simultaneamente um recurso compartilhado. Para obter mais informações, consulte Semaphore Objects.
Temporizador de espera Notifica um ou mais threads de espera de que um horário especificado chegou. Para obter mais informações, consulte Waitable Timer Objects.

 

Embora disponíveis para outros usos, os seguintes objetos também podem ser usados para sincronização.

Objeto Descrição
Notificação de alteração Criado pela funçãoFindFirstChangeNotification, seu estado é definido como sinalizado quando ocorre um tipo especificado de alteração dentro de um diretório ou árvore de diretórios especificados. Para obter mais informações, consulte Obtendo notificações de alteração de diretório.
Entrada de console Criado quando um console é criado. O identificador para a entrada do console é retornado pela funçãoCreateFile quando CONIN$ é especificado ou pela funçãoGetStdHandle. Seu estado é definido como sinalizado quando há entrada não lida no buffer de entrada do console e definido como não sinalizado quando o buffer de entrada está vazio. Para obter mais informações sobre consoles, consulte Character-Mode Applications
Emprego Criado chamando o CreateJobObject função. O estado de um objeto de trabalho é definido como sinalizado quando todos os seus processos são encerrados porque o limite de tempo de fim de trabalho especificado foi excedido. Para obter mais informações sobre objetos de trabalho, consulte Job Objects.
Notificação de recurso de memória Criado pelo CreateMemoryResourceNotification função. Seu estado é definido como sinalizado quando um tipo especificado de alteração ocorre na memória física. Para obter mais informações sobre memória, consulte Memory Management.
Processo Criado chamando a funçãoCreateProcess. Seu estado é definido como não sinalizado enquanto o processo está em execução e definido como sinalizado quando o processo é encerrado. Para obter mais informações sobre processos, consulte Processes and Threads.
Tópico Criado quando um novo thread é criado chamando o CreateProcess, CreateThreadou função de CreateRemoteThread. Seu estado é definido como não sinalizado enquanto o thread está em execução e definido como sinalizado quando o thread termina. Para obter mais informações sobre threads, consulte Processes and Threads.

 

Em algumas circunstâncias, você também pode usar um arquivo, pipe nomeado ou dispositivo de comunicação como um objeto de sincronização; no entanto, a sua utilização para este fim é desencorajada. Em vez disso, use E/S assíncrona e aguarde o objeto de evento definido na estruturaOVERLAPPED. É mais seguro usar o objeto de evento devido à confusão que pode ocorrer quando várias operações sobrepostas simultâneas são executadas no mesmo arquivo, pipe nomeado ou dispositivo de comunicação. Nessa situação, não há como saber qual operação causou o estado do objeto a ser sinalizado.

Para obter informações adicionais sobre operações de E/S em arquivos, pipes nomeados ou comunicações, consulte Sincronização ede entrada e saída sobrepostas .