Partilhar via


Listas vinculadas individualmente interligadas

Um de lista interligado isoladamente (SList) facilita a tarefa de inserção e exclusão de uma lista vinculada. SLists são implementados 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 intercambiáveis pelas primitivas de câmbio intertravadas nativas não é o dobro do tamanho do endereço, como é no código de 32 bits. Portanto, o SLists permite a portabilidade de algoritmos escaláveis high-end para o Windows.

Windows 8: A partir do Windows 8, as primitivas de câmbio interbloqueadas nativas apropriadas estão disponíveis para código de 64 bits, por exemplo, InterlockedCompare64Exchange128.

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

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

Para obter um exemplo, consulte Usando listas vinculadas individualmente.

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

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