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ý
MYSQL
struktura 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í.