Jako opiekun dość dużej aplikacji w języku C, która wykonuje wywołania MySQL z wielu wątków, mogę powiedzieć, że nie miałem problemów z prostym nawiązaniem nowego połączenia w każdym wątku. Kilka zastrzeżeń, na które się natknąłem:
- Edytuj:wydaje się, że ten punkt dotyczy tylko wersji <5.5; zobacz tę stronę, aby uzyskać odpowiednią wersję : Tak jak mówisz, że już to robisz, link do
libmysqlclient_r
. - Zadzwoń
mysql_library_init()
(raz, odmain()
). Przeczytaj dokumentację na temat używania w środowiskach wielowątkowych, aby zobaczyć, dlaczego jest to konieczne. - Utwórz nowy
MYSQL
struktura przy użyciumysql_init()
w każdym wątku. Ma to efekt uboczny wywołaniamysql_thread_init ()
dla Was.mysql_real_connect()
jak zwykle wewnątrz każdego wątku, z jego specyficzną dla wątku strukturą MYSQL. - Jeśli tworzysz/niszczysz wiele wątków, będziesz chciał użyć
mysql_thread_end()
na końcu każdego wątku (imysql_library_end()
na końcumain()
). W każdym razie to dobra praktyka.
Zasadniczo nie udostępniaj MYSQL
struktury lub cokolwiek utworzonego specjalnie dla tej struktury (np. MYSQL_STMT
s) i będzie działać zgodnie z oczekiwaniami.
Wydaje mi się, że to mniej pracy niż tworzenie puli połączeń.