Tentamos usar os pacotes RTS thread com o MySQL mas nos deparamos com o seguinte problema:
Eles usam um versão antiga de diversas chamadas POSIX e é muito tedioso fazer ``wrappers'' para todas as funções. Estamos inclinados a pensar que seria mais fácil alterar a biblioteca de threads para a especificação POSIX mais nova.
      Alguns ``wrappers'' já estão escritos. Veja
      mysys/my_pthread.c para maiores
      informações.
    
Pelo menos o seguinte deve ser mudado:
      pthread_get_specific deve usar um argumento.
      sigwait deve usar dois argumentos. Diversas
      funções (pelo menos pthread_cond_wait,
      pthread_cond_timedwait) deve retornar o código
      do erro. Agora eles retornam -1 e configuram
      errno.
    
      Outro problema é que threads a nivel do usuario usam o sinal
      ALRM e isto aborta diversas das funções
      (read, write,
      open...). O MySQL deve fazer uma nova tentativa
      de interrupção em todos mas não é facil de se verifica isto.
    
O maior problema não solucionado é o seguinte:
      Para conseguir alarmes de threads alteramos
      mysys/thr_alarm.c para esperar entre alarmes
      com pthread_cond_timedwait(), mas isto aborta
      com o erro EINTR. Tentamos depurar a biblioteca
      thread para descobrirmos porque isto acontece, mas não podemos
      encontrar nenhuma solução fácil.
    
Se alguém quiser experimentar o MySQL com RTS threads sugerimos o seguinte:
Altere as funções que o MySQL usa da biblioteca de threads para POSIX. Isto não deve levar tanto tempo.
          Compile todas as bibliotecas com
          -DHAVE_rts_threads.
        
          Compile thr_alarm.
        
          Se houver alguma pequena diferença na implementação, elas
          devem ser corrigidas alterando
          my_pthread.h e
          my_pthread.c.
        
          Execute thr_alarm. Se ele executar sem
          mensagens de ``aviso'', ``erro'' ou aborto, você está na
          trilha certa. Aqui está uma execução bem sucedidad no
          Solaris:
Main thread: 1 Thread 0 (5) started Thread: 5 Waiting process_alarm Thread 1 (6) started Thread: 6 Waiting process_alarm process_alarm thread_alarm Thread: 6 Slept for 1 (1) sec Thread: 6 Waiting process_alarm process_alarm thread_alarm Thread: 6 Slept for 2 (2) sec Thread: 6 Simulation of no alarm needed Thread: 6 Slept for 0 (3) sec Thread: 6 Waiting process_alarm process_alarm thread_alarm Thread: 6 Slept for 4 (4) sec Thread: 6 Waiting process_alarm thread_alarm Thread: 5 Slept for 10 (10) sec Thread: 5 Waiting process_alarm process_alarm thread_alarm Thread: 6 Slept for 5 (5) sec Thread: 6 Waiting process_alarm process_alarm ... thread_alarm Thread: 5 Slept for 0 (1) sec end
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.

