Als Betreuer einer ziemlich großen C-Anwendung, die MySQL-Aufrufe von mehreren Threads aus durchführt, kann ich sagen, dass ich keine Probleme damit hatte, einfach in jedem Thread eine neue Verbindung herzustellen. Einige Vorbehalte, auf die ich gestoßen bin:
- Bearbeiten:Anscheinend gilt dieser Aufzählungspunkt nur für Versionen <5.5; siehe diese Seite für Ihre passende Version : Wie Sie sagen, dass Sie es bereits tun, verknüpfen Sie mit
libmysqlclient_r. - Rufen Sie
mysql_library_init()(einmal vonmain()). Lesen Sie die Dokumentation zur Verwendung in Multithread-Umgebungen, um zu sehen, warum dies notwendig ist. - Erstellen Sie ein neues
MYSQLStruktur mitmysql_init()in jedem Thread. Dies hat den Nebeneffekt, dassmysql_thread_init aufgerufen wird ()für dich.mysql_real_connect()wie üblich in jedem Thread, mit seiner Thread-spezifischen MYSQL-Struktur. - Wenn Sie viele Threads erstellen/zerstören, sollten Sie
mysql_thread_end()am Ende jedes Threads (undmysql_library_end()am Ende vonmain()). Es ist sowieso eine gute Übung.
Teilen Sie MYSQL grundsätzlich nicht Strukturen oder alles, was speziell für diese Struktur erstellt wurde (z. B. MYSQL_STMT s) und es funktioniert wie erwartet.
Das scheint mir weniger Arbeit zu sein, als einen Verbindungspool zu erstellen.