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
MYSQL
Struktur 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.