Là người bảo trì một ứng dụng C khá lớn thực hiện các cuộc gọi MySQL từ nhiều luồng, tôi có thể nói rằng tôi không gặp vấn đề gì với việc tạo một kết nối mới trong mỗi luồng. Một số lưu ý mà tôi đã gặp:
- Chỉnh sửa:có vẻ như dấu đầu dòng này chỉ áp dụng cho các phiên bản <5.5; xem trang này để biết phiên bản thích hợp của bạn : Giống như bạn nói rằng bạn đang làm, hãy liên kết với
libmysqlclient_r
. - Gọi
mysql_library_init()
(một lần, từmain()
). Đọc tài liệu về cách sử dụng trong môi trường đa luồng để biết lý do tại sao nó lại cần thiết. - Tạo một
MYSQL
mới cấu trúc sử dụngmysql_init()
trong mỗi chủ đề. Điều này có tác dụng phụ khi gọimysql_thread_init()
cho bạn.mysql_real_connect()
như thường lệ bên trong mỗi luồng, với cấu trúc MYSQL dành riêng cho luồng của nó. - Nếu bạn đang tạo / hủy nhiều chuỗi, bạn sẽ muốn sử dụng
mysql_thread_end()
ở cuối mỗi chuỗi (vàmysql_library_end()
ở cuốimain()
). Dù sao thì đó cũng là một phương pháp tốt.
Về cơ bản, không chia sẻ MYSQL
cấu trúc hoặc bất kỳ thứ gì được tạo cụ thể cho cấu trúc đó (tức là MYSQL_STMT
s) và nó sẽ hoạt động như bạn mong đợi.
Điều này có vẻ như ít công việc hơn so với việc tạo ra một nhóm kết nối đối với tôi.