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. |