Repolode
max0x7ba

max0x7ba/atomic_queue

Filas ring buffer lock-free de C++14, em header-only, para troca de mensagens entre threads com latência mínima entre push e pop.

Estrelas
1,899
Forks
221
Issues abertas
1
Último commit
há 7 dias

O que é?

atomic_queue é um conjunto de filas de C++14 header-only para múltiplos produtores e múltiplos consumidores, construídas sobre ring buffers de capacidade fixa e std::atomic. O objetivo declarado é minimizar o tempo entre uma thread inserir um elemento e outra removê-lo, por isso a biblioteca é voltada a código sensível à latência, como sistemas de trading e caminhos críticos de logging.

As filas têm capacidade fixa, definida em tempo de compilação ou na construção, então não há alocação no heap após a construção. Há variantes para tipos atômicos e não atômicos, como std::unique_ptr, com buffers baseados em arrays ou no heap. Variantes baseadas em arrays e independentes de posição podem ser usadas em memória compartilhada para comunicação entre processos. A biblioteca oferece versões de push/pop com espera ativa e versões não bloqueantes de try_push/try_pop, além de um modo SPSC que evita operações atômicas de read-modify-write.

O projeto é testado no CI em Linux x86_64 e ARM, além de execuções entre arquiteturas sob QEMU para RISC-V, PowerPC, s390x e LoongArch, e no Windows x86_64 e macOS ARM via CMake. É possível usá-lo por meio do CMake, vcpkg ou Conan.

Recursos principais

  • 01Biblioteca C++14 header-only, sem necessidade de etapa de build para usá-la.
  • 02Ring buffers de capacidade fixa, sem alocação no heap após a construção.
  • 03Variantes para tipos de elemento atômicos e não atômicos, incluindo tipos que só podem ser movidos, como std::unique_ptr.
  • 04Filas baseadas em arrays e independentes de posição, que podem ser usadas em memória compartilhada.
  • 05Modo opcional de ordenação FIFO total para push e pop.
  • 06Versões não bloqueantes de try_push/try_pop e versões de push/pop com espera ativa.

Casos de uso

  • Trocar dados de mercado ou ordens entre threads em software de trading sensível à latência.
  • Descarregar registros de log de um caminho crítico para uma thread em segundo plano responsável pela formatação e pela E/S.
  • Trocar mensagens pequenas entre processos por meio de um segmento de memória compartilhada.
  • Distribuir tarefas de produtores para um conjunto de threads de trabalho com capacidade limitada.

Antes de usar

  • A capacidade da fila é definida em tempo de compilação ou na construção, portanto não pode crescer.
  • Não há funções push ou pop que bloqueiem no nível do sistema operacional, então as threads em espera ficam em loop e consomem CPU.
  • Foi desenvolvido e testado principalmente no Linux x86_64, então há menos validação em outras plataformas.

Tópicos

Perguntas frequentes

O que é atomic_queue?
Filas ring buffer lock-free de C++14, em header-only, para troca de mensagens entre threads com latência mínima entre push e pop. atomic_queue é um conjunto de filas de C++14 header-only para múltiplos produtores e múltiplos consumidores, construídas sobre ring buffers de capacidade fixa e std::atomic. O objetivo declarado é minimizar o tempo entre uma thread inserir um elemento e outra removê-lo, por isso a biblioteca é voltada a código sensível à latência, como sistemas de trading e caminhos críticos de logging.
atomic_queue é gratuito? Qual é a licença?
atomic_queue é open source sob a licença MIT. Confira os termos da licença antes de usá-lo em produtos comerciais.
atomic_queue ainda é mantido?
Manutenção ativa. O último commit de atomic_queue foi em 16 de out. de 2026.
Para que posso usar atomic_queue?
Trocar dados de mercado ou ordens entre threads em software de trading sensível à latência. Descarregar registros de log de um caminho crítico para uma thread em segundo plano responsável pela formatação e pela E/S. Trocar mensagens pequenas entre processos por meio de um segmento de memória compartilhada. Distribuir tarefas de produtores para um conjunto de threads de trabalho com capacidade limitada.
Onde consigo atomic_queue?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/max0x7ba/atomic_queue

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados