Dados específicos do encadeamento versus armazenamento local do encadeamento
Eu li o livro de KerriskA interface de programação do Linux: um manual de programação de sistemas Linux e UNIX, Capítulo 31 em Tópicos. O capítulo inclui Dados Específicos de Encadeamento (Seção 31.3.4) e Armazenamento Local de Encadeamento (Seção 31.4). Os tópicos foram abordados nas páginas 663-669.
Dados específicos do segmento (pthread_key_create
, pthread_setspecific
, pthread_getspecific
e amigos) parece mais poderoso, mas parece ser um pouco mais complicado de usar e parece usar o gerenciador de memória com mais frequência.
Armazenamento local de threads (__thread
em declarações estáticas e globais) parece um pouco menos poderoso, pois é limitado ao tempo de compilação, mas parece ser mais fácil de usar e parece ficar fora do gerenciador de memória em tempo de execução.
Eu posso estar errado sobre o gerenciador de memória de tempo de execução, pois pode haver código nos bastidores que chamapthread_key_create
quando encontra__thread
variáveis.
Kerrisk não ofereceu uma comparação / contraste das duas estratégias e não fez uma recomendação sobre quando usar qual em uma determinada situação.
Para adicionar contexto à pergunta: estou avaliando uma biblioteca de terceiros. A biblioteca usa globais, faznão utilize o bloqueio e quero usá-lo em um programa multiencadeado. O programa usa o encadeamento para minimizar as latências da rede.
Existe um vencedor de mãos dadas? Ou existem cenários diferentes que justificam o uso de um ou de outro?