704 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
Sie benutzen die alte Version vieler POSIX-Aufrufe und es ist sehr m¨uhsam, Wrapper f¨ur
alle Funktionen zu schreiben. Ich neige dazu zu denken, dass es leichter ist, die Thread-
Bibliotheken auf die neueste POSIX-Spezifikation zu ¨andern.
Einige Wrapper sind bereits geschrieben. Siehe ‘mysys/my_pThread.c’ wegen weiterer In-
formationen.
Zumindest folgendes sollte ge¨andert werden:
pthread_get_specific sollte ein Argument benutzen. sigwait sollte zwei Argumente
entgegennehmen. Viele Funktionen (zumindest pthread_cond_wait und pthread_cond_
timedwait) sollten bei einem Fehler den Fehler-Code zur¨uckgeben. Momentan geben sie -1
zur¨uck und setzen errno.
Ein weiteres Problem ist, dass Threads auf Benutzerebene das ALRM-Signal benutzen und
dass dieses viele Funktionen abbricht (read, write, open, ...). MySQL sollte versuchen,
nach der Unterbrechung all dieser Funktionen weiterzumachen, aber das ist nicht einfach
zu verifizieren.
Das gr¨oßte ungel¨oste Problem ist folgendes:
Um Alarme auf Thread-Ebene zu erhalten, ¨anderte ich ‘mysys/thr_alarm.c’ in der Art,
dass es zwischen Alarmen wartet, mit pthread_cond_timedwait(), aber das bricht mit
Fehler EINTR ab. Ich versuchte, die Thread-Bibliothek zu debuggen, um den Grund her-
auszufinden, konnte aber keine einfache L¨osung finden.
Wenn jemand MySQL mit RTS-Thread ausprobieren m¨ochte, schlage ich folgendes vor:
• Funktionen, die MySQL benutzt, von der Thread-Bibliothek zu POSIX ¨andern. Das
sollte nicht lange dauern.
• Alle Bibliotheken mit -DHAVE_rts_thread kompilieren.
• thr_alarm kompilieren.
• Wenn es kleine Unterschiede in der Implementation gibt, k¨onnen diese behoben werden,
indem man ‘my_pThread.h’ und ‘my_pThread.c’ ¨andert.
• thr_alarm laufen lassen. Wenn es ohne irgend welche “warning”-, “error”- oder
“aborted”-Meldungen l¨auft, sind Sie auf dem richtigen Weg. Hier ist ein erfolgreiches
Laufenlassen unter 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
Comentarios a estos manuales