Compartilhar via


Listas vinculadas de Singly interlocked

Uma SList (lista vinculada por singly) interlocked facilita a tarefa de inserção e exclusão de uma lista vinculada. As SLists são implementadas usando um algoritmo sem bloqueio para fornecer sincronização atômica, aumentar o desempenho do sistema e evitar problemas como inversão de prioridade e comboios de bloqueio.

SLists são simples de implementar e usar em código de 32 bits. No entanto, é um desafio implementá-los em código de 64 bits porque a quantidade de dados trocáveis pelos primitivos de troca interligados nativos não é o dobro do tamanho do endereço, pois está no código de 32 bits. Portanto, as SLists permitem a portabilidade de algoritmos escalonáveis de alto nível para o Windows.

Windows 8: a partir do Windows 8 os primitivos de troca interligados nativos apropriados estão disponíveis para código de 64 bits, por exemplo, InterlockedCompare64Exchange128.

Os aplicativos podem usar SLists chamando a função InitializeSListHead para inicializar o cabeçalho da lista. Para inserir itens na lista, use a função InterlockedPushEntrySList . Para excluir itens da lista, use a função InterlockedPopEntrySList .

Todos os itens de lista devem ser alinhados em um limite de MEMORY_ALLOCATION_ALIGNMENT . Itens não alinhados podem causar resultados imprevisíveis. Confira _aligned_malloc.

Para obter um exemplo, consulte Usando listas vinculadas do Singly.

A tabela a seguir lista as funções SList.

Função Descrição
InitializeSListHead Inicializa o cabeçalho de uma lista vinculada.
InterlockedFlushSList Libera toda a lista de itens em uma lista vinculada.
InterlockedPopEntrySList Remove um item da frente de uma lista vinculada.
InterlockedPushEntrySList Insere um item na frente de uma lista vinculada.
InterlockedPushListSList Insere uma lista vinculada na frente de outra lista vinculada.
InterlockedPushListSListEx Insere uma lista vinculada na frente de outra lista vinculada. Esta versão do método não usa a convenção de chamada __fastcall .
RtlFirstEntrySList Recupera a primeira entrada em uma lista vinculada.
QueryDepthSList Recupera o número de entradas na lista vinculada de forma singly especificada.