pthread_mutex_t == ?

beuteltier

Grünschnabel
Hallo ich würde gern wissen wie man anhand eines pthread_mutex_t erkennt ob dieser erfolgreich an pthread_mutex_init() übergeben wurde bzw. ob es eine Art Default-Value ähnlich SEM_FAILED gibt?!

Dank Im Vorraus
Das Beuteltier!
 
Ich weiß nicht genau, was du mit erkennen meinst. Dein Code sollte es dir doch eigentlich sagen, ob initialisiert oder nicht. Normalerweise initialisiert man einen Mutex direkt nach der Allokation:

C++:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

Damit ist die Initialisierung abgeschlossen.

Was genau meinst du mit deiner Frage?
 
Ich hab' eine (Baum-)Struktur, Bsp:
Code:
struct my_t {
    my_t *parent;
    my_t *children;
    my_t *next;
    /* ... */
    pthread_mutex_t mutex;
};
.. und natürlich auch eine API 'drumherum. Wenn ich nun aber einen solchen Baum konstruiere, brauche ich meist nur an einem Knoten Thread-Sicherheit.
Sprich' ich kann mir Sachen wie pthread_mutex_lock etc. meist ersparen. So könnte ich in einer der API-Funktionen etwa folgendes schreiben:
Code:
my_t*
my_create(my_t *parent)
{
    my_t *retval;
    /* malloc, etc. */
    if(NULL == parent) {
        retval->parent = NULL;
        retval->next = NULL;
    } else {
        if(MUTEX_IST_AKTIV(parent->mutex))
            pthread_mutex_lock(parent->mutex);
        retval->next = parent->children;
        parent->children = retval->next;
        if(MUTEX_IST_AKTIV(parent->mutex))
            pthread_mutex_unlock(parent->mutex);
    }
    return retval;
}
Natürlich könnte ich auch einfach ein weiteres (int) flag in der Struktur einführen, aber vielleicht muss das ja nicht sein?
 
Interessantes Anwendungsgebiet für Mutexes. Hmm, da bin ich allerdings überfragt. Ich würde es genau wie du selbst schon vorgeschlagen hast, mittels eines zusätzlichen Attributes machen.
 
Zurück