2010-11-18 11 views
1

Ich frage mich, ob die Florida State University Implementierung der Pthread-Standard ist in der Lage, in der Lage, die rekursive Mutexe zu behandeln. Leider ist die Dokumentation über die FSU-Implementierung eher dürftig und erwähnt nicht die Möglichkeit oder nicht, einen Mutex als rekursiv zu deklarieren.Rekursive Mutex mit FSU Pthread Implementierung

Der Versuch, einen Mutex zu erklären, wie folgt:

pthread_mutex_attr mutex_attr; 
pthread_mutexattr_init (&mutex_attr); 
pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE); 
pthread_mutex_init(&mutex, NULL); 

und pthreads-Bibliothek mit der FSU kompilieren, habe ich diese Liste von Fehlern:

test.c:25: error: `pthread_mutex_attr' undeclared (first use in this function) 
test.c:25: error: (Each undeclared identifier is reported only once 
test.c:25: error: for each function it appears in.) 
test.c:25: error: parse error before "mutex_attr" 
test.c:27: error: `mutex_attr' undeclared (first use in this function) 
test.c:28: error: `PTHREAD_MUTEX_RECURSIVE' undeclared (first use in this function) 

Der Versuch, den gleichen Code mit der kompilieren (Nicht-FSU) Pthread-Implementierung auf meiner Maschine, es funktioniert.

Um Nebensächlichkeiten zu vermeiden, erkläre ich Ihnen im Voraus, dass die POSIX Mutexe standardmäßig nicht rekursiv sind.

Sollte ich schlussfolgern, dass es keine Möglichkeit gibt, rekursive Mutexe mit der FSU-Implementierung zu verwenden, oder gibt es eine andere Möglichkeit, diese zu erreichen (d. H. Eine andere Möglichkeit, einen Mutex als rekursiv zu deklarieren)?

+1

Der Typ ist 'Pthread_mutex_attr_t' Beachten Sie die _t. –

+0

Ben, Sie haben Recht, in der Tat war der Code, den ich schrieb, nur ein Versuch, die Ausgabe des Compilers zu bekommen .. Der ursprüngliche Code war korrekt :) –

Antwort

1

Nein, die FST Pthreads-Implementierung unterstützt keine rekursiven Mutexe. In der Tat hat die latest release keine Ahnung von Mutextypen. Zusätzlich zu den PTHREAD_MUTEX_* Mutex-Namen fehlen auch die Funktionen pthread_mutexattr_settype() und pthread_mutexattr_gettype(), die zur Manipulation des Mutex-Typs verwendet werden.

+0

Danke Jeremy, also, in Anbetracht dessen, ich denke, ich sollte den Fluss ändern meine Anwendung, um die Verschachtelung zu vermeiden. –