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, possibilitando a sincronização entre processos.
Os tipos de objeto a seguir são fornecidos exclusivamente para sincronização.
Type | Descrição |
---|---|
Evento | Notifica um ou mais threads de espera em que um evento ocorreu. Para obter mais informações, consulte Objetos de evento. |
Mutex | Pode ser propriedade de apenas um thread por vez, permitindo que os threads coordenem o acesso mutuamente exclusivo a um recurso compartilhado. Para obter mais informações, consulte Objetos Mutex. |
Sinal | 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 Objetos semáforos. |
Temporizador de espera | Notifica um ou mais threads de espera de que chegou uma hora especificada. Para obter mais informações, consulte Objetos de temporizador de espera. |
Embora disponíveis para outros usos, os objetos a seguir também podem ser usados para sincronização.
Objeto | Descrição |
---|---|
Alterar notificação | Criado pela função FindFirstChangeNotification , seu estado é definido como sinalizado quando ocorre um tipo especificado de alteração em um diretório ou árvore de diretório especificado. Para obter mais informações, consulte Obtendo notificações de alteração de diretório. |
Entrada do console | Criado quando um console é criado. O identificador para entrada do console é retornado pela função CreateFile quando CONIN$ é especificado ou pela função GetStdHandle . Seu estado é definido como sinalizado quando há entrada não lida no buffer de entrada do console e definido como não atribuído quando o buffer de entrada está vazio. Para obter mais informações sobre consoles, consulte Aplicativos de modo de caractere |
Trabalho | Criado chamando a função CreateJobObject . 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 do trabalho especificado foi excedido. Para obter mais informações sobre objetos de trabalho, consulte Objetos de Trabalho. |
Notificação de recurso de memória | Criado pela função CreateMemoryResourceNotification . 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 Gerenciamento de Memória. |
Processar | Criado chamando a função CreateProcess . Seu estado é definido como não atribuído enquanto o processo está em execução e definido como sinalizado quando o processo é encerrado. Para obter mais informações sobre processos, consulte Processos e Threads. |
Thread | Criado quando um novo thread é criado chamando a função CreateProcess, CreateThread ou CreateRemoteThread . Seu estado é definido como não atribuído enquanto o thread está em execução e definido como sinalizado quando o thread é encerrado. Para obter mais informações sobre threads, consulte Processos e Threads. |
Em algumas circunstâncias, você também pode usar um arquivo, um pipe nomeado ou um dispositivo de comunicação como um objeto de sincronização; no entanto, seu uso para essa finalidade é desencorajado. Em vez disso, use E/S assíncrona e aguarde o conjunto de objetos de evento na estrutura OVERLAPPED . É 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 fez com que o estado do objeto fosse sinalizado.
Para obter informações adicionais sobre operações de E/S em arquivos, pipes nomeados ou comunicações, consulte Sincronização e Entrada e Saída Sobrepostas.