Compartilhar via


Multithreading: Quando usar as Classes de sincronização

As classes multithread fornecidas com MFC se dividem em duas categorias: objetos de sincronização (CSyncObject, CSemaphore, CMutex, CCriticalSection, e CEvent) e objetos de acesso a sincronização (CMultiLock e CSingleLock).

Classes de sincronização são usados quando o acesso a um recurso deve ser controlado para garantir a integridade do recurso.Classes de acesso de sincronização são usadas para acessar esses recursos controlados.Este tópico descreve quando usar cada classe.

Para determinar qual classe de sincronização que você deve usar, pergunte a série de perguntas a seguir:

  1. O aplicativo tem de esperar algo acontecer antes que ele possa acessar o recurso (por exemplo, dados devem ser recebidos de uma porta de comunicações antes de que podem ser gravado em um arquivo)?

    If yes, use CEvent.

  2. Pode mais de um thread dentro do mesmo acesso de aplicativo deste recurso uma vez (por exemplo, o aplicativo permite até cinco janelas com exibições no mesmo documento)?

    If yes, use CSemaphore.

  3. Mais de um aplicativo pode usar o este recurso (por exemplo, o recurso está em uma DLL)?

    If yes, use CMutex.

    If no, use CCriticalSection.

CSyncObject nunca é usado diretamente.É a classe base para outras quatro classes de sincronização.

Exemplo 1: Usando três Classes de sincronização

Por exemplo, levar um aplicativo mantém uma lista de contas.Este aplicativo permite que até três contas a ser examinado em janelas separadas, mas apenas um pode ser atualizado a qualquer momento específico.Quando uma conta é atualizada, os dados atualizados são enviados pela rede para um arquivo de dados.

Este aplicativo de exemplo usa os três tipos de classes de sincronização.Porque ele permite que até três contas a ser examinado, uma vez, ele usa CSemaphore para limitar o acesso aos três objetos de exibição.Quando uma tentativa de exibir uma quarta conta ocorre, o aplicativo ou aguarda até que o primeiro três janelas fecha ou ele falha.Quando uma conta é atualizada, o aplicativo usa CCriticalSection para garantir que apenas uma conta é atualizada ao mesmo tempo.Após a atualização for bem-sucedida, ele sinaliza CEvent, que libera um thread aguardando o evento ser sinalizado.Esse thread envia novos dados para o arquivamento de dados.

Exemplo 2: Usando Classes de acesso de sincronização

Escolher qual classe de acesso de sincronização para usar é ainda mais simples.Se seu aplicativo está preocupado com a acessar apenas um único recurso controlado, use CSingleLock.Se ele precisa acessar qualquer um dos vários recursos controlados, use CMultiLock.No exemplo 1, CSingleLock seria usado, porque cada caso é necessário apenas um recurso em um determinado momento.

Para obter informações sobre como as classes de sincronização são usadas, consulte Multithreading: como usar as Classes de sincronização.Para obter informações sobre sincronização, consulte sincronização na Windows SDK.Para obter informações sobre suporte a multithreading no MFC, consulte Multithreading com C++ e MFC.

Consulte também

Conceitos

Multithreading com C++ e MFC