2012-02-11 1 views
6

ho ricevuto questo errore:pthread_mutex_lock.c: 62: __pthread_mutex_lock: Assertion `mutex -> __ dati .__ proprietario == 0' non riuscita

pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion `mutex->_data._owner == 0' failed.

E non posso trovare qualsiasi causa di questo. Comunque non sono sicuro circa il seguente pezzo di codice:

dichiarazioni:

std::mutex lock; 
std::condition_variable cond; 

Sequenza di serrature & sblocca:

std::unique_lock<std::mutex> lk(lock); 

cond.wait(lk); 

lock.unlock(); 

Se rimuovo questa sequenza - tutto funziona bene, ma senza alcuna protezione. Non sono sicuro se uso correttamente unique_lock.

+2

Per il futuro, prova a postare programmi brevi, ma completi - http://sscce.org/ :) –

risposta

2

std::unique_lock e gli altri blocchi acquisiscono un mutex nel costruttore e lo rilascia in distruttore. Hai chiamato lock.unlock() nel tuo codice manualmente, facendolo chiamare in modo efficace due volte.

Dopo aver rimosso la dichiarazione, il codice dovrebbe funzionare correttamente.

+3

In alternativa, chiama 'lk.unlock()', in modo che il blocco sappia che il mutex è stato sbloccato. (E forse chiama il mutex qualcosa di diverso da "lock", quindi non confondilo con un lucchetto). –