Jako správce poměrně velké C aplikace, která volá MySQL z více vláken, mohu říci, že jsem neměl žádné problémy s jednoduchým vytvořením nového připojení v každém vláknu. Některá upozornění, na která jsem narazil:
- Upravit:zdá se, že tato odrážka platí pouze pro verze <5.5; příslušnou verzi naleznete na této stránce : Jak říkáte, že již děláte, odkazujte proti
libmysqlclient_r. - Zavolejte
mysql_library_init()(jednou zmain()). Přečtěte si dokumenty o použití ve vícevláknových prostředích, abyste zjistili, proč je to nutné. - Vytvořte nový
MYSQLstruktura pomocímysql_init()v každém vláknu. To má vedlejší účinek volánímysql_thread_init()pro tebe.mysql_real_connect()jako obvykle uvnitř každého vlákna s jeho strukturou MYSQL specifickou pro vlákno. - Pokud vytváříte/ničíte mnoho vláken, budete chtít použít
mysql_thread_end()na konci každého vlákna (amysql_library_end()na koncimain()). Je to každopádně dobrá praxe.
V zásadě nesdílejte MYSQL struktury nebo cokoli vytvořeného specificky pro tuto strukturu (tj. MYSQL_STMT s) a bude fungovat, jak očekáváte.
Zdá se mi to jako méně práce než vytvoření fondu připojení.