Come manutentore di un'applicazione C abbastanza grande che effettua chiamate MySQL da più thread, posso dire di non aver avuto problemi semplicemente creando una nuova connessione in ogni thread. Alcuni avvertimenti che ho riscontrato:
- Modifica:sembra che questo punto elenco si applichi solo alle versioni <5.5; vedere questa pagina per la versione appropriata : Come dici che stai già facendo, collega a
libmysqlclient_r
. - Chiama
mysql_library_init()
(una volta, damain()
). Leggi i documenti sull'uso in ambienti multithread per capire perché è necessario. - Crea un nuovo
MYSQL
struttura utilizzandomysql_init()
in ogni thread. Questo ha l'effetto collaterale di chiamaremysql_thread_init()
per te.mysql_real_connect()
come al solito all'interno di ogni thread, con la sua struttura MySQL specifica per il thread. - Se stai creando/distruggendo molti thread, ti consigliamo di utilizzare
mysql_thread_end()
alla fine di ogni thread (emysql_library_end()
alla fine dimain()
). È comunque una buona pratica.
Fondamentalmente, non condividere MYSQL
struct o qualsiasi cosa creata specifica per quella struttura (ad esempio MYSQL_STMT
s) e funzionerà come previsto.
Mi sembra meno faticoso che creare un pool di connessioni.