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