std :: mutex :: lock échoue sous Windows, code d’erreur 3

J’utilise std::mutex et std::lock_guard de manière RAII dans toute mon application:

 struct Foo { int f() const { std::lock_guard locker(m_mutex); return m_i; } private: int m_i = 0; mutable std::mutex m_mutex; }; 

Cela a toujours fonctionné, mais j’ai ajouté le parallélisme à une classe de plus, et dans cette nouvelle classe, le locker jette std::system_error . Le problème est ici (en xthread tête de xthread ):

 inline int _Mtx_lockX(_Mtx_t *_Mtx) { // throw exception on failure return (_Check_C_return(_Mtx_lock(_Mtx))); } 

_Mtx_lock renvoie 3 alors que la valeur attendue est 0. Aucune idée de ce que 3 signifie.

VS2013, v120_x64 runtime.

L’erreur mentionnée par @Phantom (_Thrd_busy) implique que le verrou a été pris récursivement. Voir aussi cette réponse