Python Threads in C Bibliothek synchronisieren?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
brosssi
User
Beiträge: 1
Registriert: Freitag 28. September 2007, 08:46

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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
TUFKAB – the user formerly known as blackbird
Antworten