En tant que mainteneur d'une application C assez volumineuse qui effectue des appels MySQL à partir de plusieurs threads, je peux dire que je n'ai eu aucun problème à établir simplement une nouvelle connexion dans chaque thread. Quelques mises en garde que j'ai rencontrées :
- Modifier :il semble que cette puce ne s'applique qu'aux versions < 5.5 ; voir cette page pour votre version appropriée : Comme vous dites que vous le faites déjà, créez un lien avec
libmysqlclient_r
. - Appelez
mysql_library_init()
(une fois, depuismain()
). Lisez la documentation sur l'utilisation dans les environnements multithreads pour voir pourquoi c'est nécessaire. - Créer un nouveau
MYSQL
structure utilisantmysql_init()
dans chaque fil. Cela a pour effet secondaire d'appelermysql_thread_init()
pour toi.mysql_real_connect()
comme d'habitude à l'intérieur de chaque thread, avec sa structure MYSQL spécifique au thread. - Si vous créez/détruisez de nombreux threads, vous voudrez utiliser
mysql_thread_end()
à la fin de chaque thread (etmysql_library_end()
à la fin demain()
). C'est une bonne pratique de toute façon.
En gros, ne partagez pas MYSQL
structures ou tout ce qui a été créé spécifiquement pour cette structure (c'est-à-dire MYSQL_STMT
s) et cela fonctionnera comme prévu.
Cela semble être moins de travail que de me créer un pool de connexions.