La bibliothèque cliente est presque compatible avec les
        threads. Le problème le plus important est les routines de
        net.c qui lisent les sockets, et qui ne
        sont pas compatibles avec les interruptions. Cela a été fait
        en imaginant que vous souhaitiez vos propres alarmes, qui
        pourraient interrompre une lecture trop longue. Si vous
        installez des gestionnaires d'interruption pour l'alarme
        SIGPIPE, la gestion des sockets devraient
        être compatible avec les threads.
      
Dans les anciennes versions binaires que nous distribuions sur notre site web, (http://www.mysql.com/), les bibliothèques clientes étaient normalement compilées avec l'option de compatibilité avec les threads (les exécutables Windows sont par défaut compatible avec les threads). Les nouvelles distributions binaires doivent disposer des deux bibliothèques, compatibles ou non avec les threads.
        Pour obtenir une client threadé où vous pouvez interrompre le
        client avec d'autres threads, mettre des délais d'expiration
        lors des discussions avec le serveur MySQL, vous devriez
        utiliser les bibliothèques -lmysys,
        -lmystrings et -ldbug,
        ainsi que net_serv.o que le serveur utilise.
      
        Si vous n'avez pas besoin des interruption ou des expirations,
        vous pouvez compiler simplement une bibliothèque compatible
        avec les threads, (mysqlclient_r) et
        l'utiliser. See Section 24.2, « API MySQL C ». Dans ce cas, vous n'avez
        pas à vous préoccuper du fichier net_serv.o
        ou des autres bibliothèques MySQL.
      
        Lorsque vous utiliser un client threadé et que vous souhaitez
        utiliser des délais d'expiration et des interruptions, vous
        pouvez faire grand usage des routines du fichier
        thr_alarm.c. Si vous utiliser des routines
        issues de la bibliothèque mysys, la seule
        chose à penser est de commencer par utiliser
        my_init()! See
        Section 24.2.11, « Description des fonctions threadées de C ».
      
        Toutes les fonctions, hormis
        mysql_real_connect() sont compatibles avec
        les threads par défaut. Les notes suivantes décrivent comment
        compiler une bibliothèque cliente compatible avec les threads.
        Les notes ci-dessous, écrites pour
        mysql_real_connect() s'appliquent aussi à
        mysql_connect(), mais comme
        mysql_connect() est obsolète, vous devriez
        utiliser mysql_real_connect()).
      
        Pour rendre mysql_real_connect() compatible
        avec les threads, vous devez recompiler la bibliothèque cliente
        avec cette commande :
      
shell> ./configure --enable-thread-safe-client
        Cela va créer une bibliothèque cliente compatible avec les
        threads libmysqlclient_r. Supposons que votre
        système d'exploitation dispose d'une fonction
        gethostbyname_r() compatible avec les
        threads. Cette bibliothèque est compatible avec les threads
        pour chaque connexion. Vous pouvez partager une connexion entre
        deux threads, avec les limitations suivantes :
      
            Deux threads ne peuvent pas envoyer de requêtes
            simultanées au serveur MySQL, sur la même connexion. En
            particulier, vous devez vous assurer qu'entre
            mysql_query() et
            mysql_store_result(), aucun autre thread
            n'utilise la même connexion.
          
            De nombreux threads peuvent accéder à différents
            résultats qui sont lus avec
            mysql_store_result().
          
            Si vous utilisez mysql_use_result, vous
            devez vous assurer qu'aucun autre thread n'utilise la même
            connexion jusqu'à ce qu'elle soit refermée. Cependant, il
            vaut bien mieux pour votre client threadé qu'ils utilisent
            mysql_store_result().
          
            Si vous voulez utiliser de multiples threads sur la même
            connexion, vous devez avoir un verrou mutex autour de vos
            fonctions mysql_query() et
            mysql_store_result(). Une fois que
            mysql_store_result() est prêt, le verrou
            peut être libéré et d'autres threads vont pouvoir
            utiliser la connexion.
          
            Si vous programmez avec les threads POSIX, vous pouvez
            utiliser les fonctions
            pthread_mutex_lock() et
            pthread_mutex_unlock() pour poser et
            enlever le verrou mutex.
          
Vous devez savoir ce qui suit si vous avez un thread qui appel une fonction MySQL qui n,a pas crée de connexion à la base MySQL :
        Lorsque vous appelez mysql_init() ou
        mysql_connect(), MySQL va créer une variable
        spécifique au thread qui est utilisée par la libaririe de
        débogage (entre autres).
      
        Si vous appelez une fonction MYSQL, avant que le thread n'ai
        appelé mysql_init() ou
        mysql_connect(), le thread ne va pas avoir
        les variables spécifiques en place, et vous risquez d'obtenir
        un core dump tôt ou tard.
      
Pour faire fonctionner le tout proprement, vous devez suivre ces étapes :
            Appeler my_init() au début du programme,
            si il appelle une autre fonction MySQL, avant d'appeler
            mysql_real_connect().
          
            Appeler mysql_thread_init() dans le
            gestionnaire de threads avant d'appeler une autre fonction
            MySQL.
          
            Dans le thread, appelez
            mysql_thread_end() avant d'appeler
            pthread_exit(). Cela va libérer la
            mémoire utiliser par les variables spécifiques MySQL.
          
        Vous pouvez rencontrer des erreurs à cause des symboles non
        définis lors du link de votre client avec
        libmysqlclient_r. Dans la plupart des cas,
        c'est parce que vous n'avez pas inclus la bibliothèque de
        threads dans la ligne de compilation.
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
