Sebagai pengelola aplikasi C yang cukup besar yang membuat panggilan MySQL dari banyak utas, saya dapat mengatakan bahwa saya tidak memiliki masalah dengan hanya membuat koneksi baru di setiap utas. Beberapa peringatan yang saya temukan:
- Sunting:sepertinya butir ini hanya berlaku untuk versi <5.5; lihat halaman ini untuk versi yang sesuai : Seperti yang Anda katakan sudah Anda lakukan, tautkan ke
libmysqlclient_r
. - Hubungi
mysql_library_init()
(sekali, darimain()
). Baca dokumen tentang penggunaan di lingkungan multithread untuk mengetahui mengapa hal itu diperlukan. - Buat
MYSQL
baru struktur menggunakanmysql_init()
di setiap utas. Ini memiliki efek samping dari memanggilmysql_thread_init()
untuk kamu.mysql_real_connect()
seperti biasa di dalam setiap utas, dengan struct MYSQL khusus utasnya. - Jika Anda membuat/menghancurkan banyak utas, Anda sebaiknya menggunakan
mysql_thread_end()
di akhir setiap utas (danmysql_library_end()
di akhirmain()
). Bagaimanapun, ini adalah latihan yang baik.
Pada dasarnya, jangan bagikan MYSQL
struct atau apa pun yang dibuat khusus untuk struct itu (yaitu MYSQL_STMT
s) dan itu akan berfungsi seperti yang Anda harapkan.
Ini sepertinya kurang berhasil daripada membuat kumpulan koneksi untuk saya.