2016-05-09 7 views
0
std::lock_guard<pthread_mutex_t> lock(mExecutionReportsLock); 

Dies kompiliert nicht, da pthread_mutex_t nicht gültige Vorlage Argument ist. Was ist der beste Weg, um diese Funktionalität zu erreichenstd :: lock_guard <pthread_mutex_t> kompiliert nicht

+2

Die POSIX 'pthread_mutex_t' ist kein geeigneter Typ (es ist nicht eine Klasse, um die [erforderliche Schnittstelle] (http unterstützt: //en.cppreference.com/w/cpp/concept/BasicLockable)) für die Instantiierung von 'std :: lock_guard', so dass die Frage keinen Sinn ergibt. Außerdem ist die POSIX-Schnittstelle eine C-API und wirft niemals etwas, also würde *, wenn dies von einer Implementierung unterstützt würde, eine 'std :: lock_guard <>' Implementierung auf 'posix_mutex_t' spezialisiert sein und eigene Entscheidungen treffen .... –

+0

Sie sagen, dass std :: lock_guard sperren (mMyPthreadMutex); würde nicht funktionieren? –

+1

Genau. 'pthread_mutex_t' wird nicht einmal im C++ Standard erwähnt (keiner von pthreads ist) - es gibt keine Notwendigkeit, es in irgendeiner Form zu unterstützen. Dennoch könnte eine spezifische Implementierung * dies tun (aber ich wäre sehr überrascht). Hast du es mit deinem Compiler probiert? –

Antwort

0
std::mutex m; 

auto my_lock = std::unique_lock<std::mutex>(m); 

oder ...

using mutex_type = std::mutex; 
using lock_type = std::unique_lock<mutex_type>; 

mutex_type m; 

auto lock = lock_type(m); 
Verwandte Themen