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 .