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
MYSQLstruttura 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.