Como mantenedor de um aplicativo C bastante grande que faz chamadas MySQL de vários threads, posso dizer que não tive problemas em simplesmente fazer uma nova conexão em cada thread. Algumas ressalvas que encontrei:
- Editar:parece que este marcador só se aplica a versões <5.5; veja esta página para sua versão apropriada
a> : Como você diz que já está fazendo, link para
libmysqlclient_r. - Chame
mysql_library_init()(uma vez, demain()). Leia os documentos sobre o uso em ambientes multithread para ver por que isso é necessário. - Criar um novo
MYSQLestrutura usandomysql_init()em cada fio. Isso tem o efeito colateral de chamarmysql_thread_init ()para você.mysql_real_connect()como de costume dentro de cada encadeamento, com sua estrutura MYSQL específica do encadeamento. - Se você estiver criando/destruindo muitos tópicos, use
mysql_thread_end()no final de cada thread (emysql_library_end()no final demain()). De qualquer forma, é uma boa prática.
Basicamente, não compartilhe
MYSQL structs ou qualquer coisa criada específica para essa struct (ou seja, MYSQL_STMT s) e funcionará como você espera. Isso parece menos trabalhoso do que fazer um pool de conexões para mim.