Fehler bei der Verwendung von Mutex

8

wenn ich versuche, eine Map mit String als Schlüssel und pthread_mutex_t als Element zu erstellen,

%Vor%

dies erzeugt:

  

phase3: pthread_mutex_lock.c: 312: __pthread_mutex_lock_full: Behauptung   '(- (e))! = 3 || ! robust 'gescheitert.

    
Adam Johns 24.12.2011, 23:27
quelle

1 Antwort

8

Es ist nicht definiert, einen Mutex zu kopieren. Versuchen Sie, einen Zeiger auf den Mutex in der Karte zu setzen.

BEARBEITEN Das ist die Art von undefiniertem Verhalten. Manchmal haben Sie Glück (oder scheinen) und manchmal nicht.

Anstelle von Kopien mehrerer Mutexe in der Map setzen Sie stattdessen mehrere Zeiger auf die Mutexe. So etwas wie:

%Vor%

Vermutlich werden Sie die Karte an verschiedene Threads weitergeben, daher ist es ratsam, diese Mutexe nicht auf dem Stapel zuzuordnen, es sei denn, Sie sind sich sicher, dass sie nicht außerhalb des Bereichs liegen. Deklarieren Sie sie als Globals oder ordnen Sie sie dynamisch zu und initialisieren Sie sie mit pthread_mutex_init() .

    
Duck 24.12.2011 23:48
quelle

Tags und Links