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