Seite 1 von 1

Python Threads in C Bibliothek synchronisieren?

Verfasst: Freitag 28. September 2007, 09:31
von brosssi
Hallo allerseits,

Ich schreibe zur Zeit eine Bibliothek in C die von Python Programmen und von C Programmen verwendet werden muss. Innerhalb der Bibliothek wird eine exklusive Ressource verwaltet. Selbstverständlich soll die Bibliothek threadsafe sein. Um dies zu gewährleisten habe ich die kritischen Pfade in der Bibliothek mit einer posix mutex vom Typ 'pthread_mutex_t' abgesichert.

Mit meinen C Programmen und Threads, funktioniert die Synchronisierung ganz wunderbar, in Python leider nicht.
Das Problem stellt sich am Beispiel mit 3 Threads unter Python folgendermassen dar:
- Der 1 Thread fordert die Mutex an, bekommt sie zugeteilt und betritt den kritischen Abschnitt. Während der 1 Thread sich im kritischen Abschnitt befindet wird der 2 te Thread zur Ausführung gebracht
- Der 2 Thread fordert die Mutex an, bekommt sie nicht und wird durch die pthread_mutex schlafen gelegt.
- Nun sollte theoretisch der 1 Thread wieder zur Ausführung kommen, oder der 3 Thread gestartet werden, was jedoch nicht passiert. Die ersten beiden Threads verharren endlos in Ihrer aktuellen Position. Der gesamte Prozess schläft.

Ich schliesse daraus dass die pthread_mutex den gesamten Python Prozess in die Pfanne haut, nicht nur den thread. Somit ist die pthread_mutex fuer die Anforderung das falsche Mittel. Welches aber ist das richtige Mittel, bzw. ist es ueberhaupt möglich das Python Threading in einer C- Bibliothek zu kontrollieren? Innerhalb der C- Bibliothek möchte ich von Python natürlich möglichst nichts wissen.

Viele Grüße,
Stephan

Verfasst: Freitag 28. September 2007, 09:59
von mitsuhiko
Das Interpreter Lock macht da nicht auf, das heißt Python wird nicht Threads switchen in deinem Code. Schau dir am Besten das mal an: http://docs.python.org/dev/c-api/init.h ... reter-lock