Compartilhar via


SYNCHRONIZE_BLOCK

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Quando você executar um compilar em um estação de trabalho desenvolvimento que tenha múltiplo processadores, isso cria a possibilidade de que diferentes segmentos da ferramenta Criação (Build.exe) podem ser execução em diferentes processadores.

Neste maiúsculas e minúsculas, você deve garantir que o processo de criação é ordenada para que Build.exe não tenta compilar um produto sem primeira compilação suas dependências.

Se essa macro está definida como 1 no arquivo Origens de uma Diretório, Build.exe termina compilação a atual Diretório antes de começar a compilar quaisquer diretórios subseqüentes.

No entanto, Build.exe ainda cria na ordem especificada pela entrada Dirs no arquivo Dirs do Diretório o pai. Isso significa que Build.exe aguarda o atual Diretório para compilação concluir antes de continuar para compilar quaisquer diretórios subseqüentes.

Use esta macro e o relacionado SYNCHRONIZE_DRAIN macro, muito com moderação. Quando encontrou, essas macros completamente da vaga o processo de criação até que seja sincronização completo.

Se um Diretório usa essa macro, lista de Diretório pela primeira vez no seu arquivo Dirs pai. Para obter mais informações, consulte Arquivo Dirs.

O seguinte exemplo de código mostra como usar essa macro.

SYNCHRONIZE_BLOCK=1

Comentários

Em um cenário exemplo onde um Diretório único pai contém três diretórios rotulados como A, B e C, se o arquivo Dirs em Diretório o pai contém a linha DIRS = A B CBUILD.exe, inicia um simultâneo processo de trabalho para cada um dos três diretórios.

Supondo que diretórios A e B compilar bibliotecas estáticas e que Diretório C combina o resultado em uma biblioteca estática única, configuração de variável de ambiente BUILD_MULTIPROCESSOR = 3 pode causar problemas, como erros de link e sincronização. Para obter mais informações sobre este variável de ambiente, consulte diversos variáveis de ambiente.

Esses problemas ocorrer porque, dependendo o comportamento do área de trabalho processos estação de trabalho, a compilação e link no Diretório C pode executar antes um ou ambos os diretórios A e B, que causa um erro link no Diretório C. Esse erro ocorre porque a entrada necessária biblioteca não tiver sido compilado com base nos resultados de diretórios A e B.

Um erro mais sutil pode ocorrer se o usuário não estiver executando um compilar limpa. De exemplo, pode haver versões preexistentes de biblioteca A ou B que foram anteriormente compilado. Isso, se Diretório C é compilado antes Diretório A ou B, ele será link às versões desatualizadas do biblioteca A ou B. A biblioteca C resultante não conterá as alterações esperadas da biblioteca A ou B, mas ele será exibido para ter sido compilado corretamente. Quando o usuário suspeita que esse tipo de erro pode ter ocorrido, executar uma apresentação explicitamente geralmente será limpa compilar o erro link.

Devido para acelerar as diferenças entre área de trabalho estações de trabalho, algumas estações de trabalho podem apresentar problemas sincronização enquanto outros não. No entanto, quando um estação de trabalho apresenta um condição de concorrência, ele é geralmente pode ser reproduzido na mesma máquina.

Para ajudar a evitar esses problemas, as macros SYNCHRONIZE_BLOCK e SYNCHRONIZE_DRAIN são usadas. Para obter mais informações, consulte SYNCHRONIZE_DRAIN.

No cenário acima, a linha SYNCHRONIZE_DRAIN = 1 é adicionada ao arquivo de fontes na Diretório C.

Isso permite que os diretórios A e B para concluir a compilação e vinculação antes de iniciar o processo para C. Diretório Build.exe No entanto, depois que os diretórios A e B forem concluídos, Build.exe pode iniciar processamento Diretório C in addition to o próximo GRUPO de pastas especificadas no arquivo Dirs pai. Essa pode causar problemas quando Diretório C contém bibliotecas usadas por outros diretórios, e esses diretórios são compilado antes Diretório C for concluído.

Para ajudar a evitar esses problemas, a linha SYNCHRONIZE_BLOCK = 1 é adicionado à biblioteca primeira no Diretório C. Isso permite que o Diretório para compilação concluir antes de Build.exe Iniciar processamento o próximo diretórios de fila, que pode até mesmo ser processado pelo múltiplo processos de trabalho.

Esteja ciente de que existe uma distinção sutil entre as duas macros, que não são mutuamente exclusivos.

Embora incomum, é possível para uma biblioteca estática para exigir um número de acima bibliotecas e por sua vez, ser usado próprio por um número de diretórios subseqüentes. Este maiúsculas e minúsculas, o Diretório requer SYNCHRONIZE_DRAIN ser definida para permitir a acima diretórios para ser compilado. Ele também requer SYNCHRONIZE_BLOCK ser configurar de modo que os Diretório pode concluir compilação antes Build.exe continua para os diretórios subseqüentes.

See Also

Concepts

Sources File
Build Tool
Windows Embedded CE Build Environment Tool