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_getspecifice 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?

questionAnswers(2)

yourAnswerToTheQuestion