Als beheerder van een vrij grote C-toepassing die MySQL-aanroepen doet vanuit meerdere threads, kan ik zeggen dat ik geen problemen heb gehad met het eenvoudig maken van een nieuwe verbinding in elke thread. Enkele kanttekeningen die ik ben tegengekomen:
- Bewerken:het lijkt erop dat dit opsommingsteken alleen van toepassing is op versies <5.5; zie deze pagina voor de juiste versie : Zoals je zegt dat je al doet, link tegen
libmysqlclient_r
. - Bel
mysql_library_init()
(eenmaal, vanmain()
). Lees de documenten over gebruik in omgevingen met meerdere threads om te zien waarom het nodig is. - Maak een nieuwe
MYSQL
structuur met behulp vanmysql_init()
in elke draad. Dit heeft de bijwerking van het aanroepen vanmysql_thread_init()
voor jou.mysql_real_connect()
zoals gebruikelijk in elke thread, met zijn thread-specifieke MYSQL-struct. - Als je veel discussielijnen maakt/vernietigt, gebruik dan
mysql_thread_end()
aan het einde van elke thread (enmysql_library_end()
aan het einde vanmain()
). Het is sowieso een goede gewoonte.
Deel in principe geen MYSQL
structs of iets dat specifiek voor die struct is gemaakt (d.w.z. MYSQL_STMT
s) en het zal werken zoals je verwacht.
Dit lijkt mij minder werk dan het maken van een verbindingspool.