2009-06-02 6 views
4

Ich erhalte einen Segmentation Fault, wenn ich versucheSegmentierungsfehler auf pthread_mutex_lock

pthread_mutex_lock(&_mutex). 

Das ist wirklich seltsam zu tun, ich bin nicht sicher, was könnte es verursacht haben. Ich habe _mutex im Konstruktor mit

pthread_mutex_init(&_mutex,NULL). 

alles initialisiert, was ich tun kann?

+1

post mehr Code, bitte. Es ist sehr wahrscheinlich, dass das Problem irgendwo völlig anders ist und nur in Ihrem pthread_mutex_lock-Aufruf auftaucht. – lothar

+0

Es ist nicht möglich, mit den von Ihnen bereitgestellten Informationen zu helfen. Sie werden nichts mehr bekommen als Vermutungen. –

+0

Ich hoffte auf eine fundierte Vermutung, etwas in der Art von "Sie müssen eine globale Initialisierungsfunktion bei main() aufrufen". Stellt sich heraus, es ist nur etwas dummes. Nun, Seg Fehler, was würdest du erwarten? – Nefzen

Antwort

5

löste es, und ich bin sehr verärgert darüber. Ich wollte einen Producer * als Argument an die Funktion senden, die der Pthread ausführt, also habe ich & (* iter) verwendet, wobei iter ein Iterator ist, der auf einem Producer-Vektor läuft.

ich bemerkte, dass es (zu Recht) ein Vektor < Producer *> war, was bedeutete, dass ich Producer * * gesendet habe, was zu undefinierten Ergebnissen führte. Grrrrr. Offensichtlich habe ich das nicht bemerkt, weil Pthreads in reinem C ist und deshalb void * verwendet, da es nur eine Art von Argumenten akzeptiert.

+0

Ich dachte, ich würde Stunden damit verbringen müssen, herauszufinden, warum ich einen segfault auf einem Mutex-Lock bekommen würde, aber das war der erste Post, den ich gefunden habe und es stellte sich heraus, dass ich genau das gleiche tat wie du! – iedoc

2

Schließen Sie einen Debugger an und finden Sie genau, was den segfault verursacht. Es ist möglich, dass ein Zeiger gerade in die Zufälligkeit oder in den nicht initialisierten Bereich zeigt.

Führen Sie auch valgrind 's memcheck und sehen Sie, was das sagt.

bearbeiten

In Reaktion auf die Kommentare der Nutzung des Pthread API klingen unten, irgendwo falsch. Ich empfahl "PThread Programming" von O'Reilly als Referenz. Es hat mich dazu gebracht :) Ich vermutete das, weil die Verwendung der API einen internen Zeiger auf die pthread_mutex_t Struktur irgendwo gefährlich verschiebt. Dies sollte nicht bei korrekter Verwendung der API passieren.

+0

Ich würde, aber die Eclipse entschied sich nicht zu kooperieren und Debuggen funktioniert im Moment nicht: x – Nefzen

+0

Sie werden müssen. Es ist unwahrscheinlich, dass es sich um einen Fehler in der Pthread-API handelt ... so dass nur der Code übrig bleibt: S :) –

+0

Ich nehme an. nun, ich habe es geschafft, den Eclipse Bug jetzt zu lösen, also bin ich glücklich, so sehr ich über das Debugging nachdenken kann, das ich jetzt machen muss. – Nefzen