2015-07-09 16 views
10

Das Übergeben eines Mutex-Verweises an einen Thread verursacht Kompilierungsfehler. Warum ist es nicht möglich (ich habe mehrere Threads mit der gleichen gemeinsamen Variablen), und wie kann ich es beheben?Warum ist das Übergeben von Mutex an Thread nicht möglich?

#include<iostream> 
#include<thread> 
#include<mutex> 

void myf(std::mutex& mtx) 
{ 
    while(true) 
    { 
     // lock 
     // do something 
     // unlock 
    } 
} 


int main(int argc, char** argv) 
{ 
    std::mutex mtx; 

    std::thread t(myf, mtx); 

    t.join(); 
    return 0; 
} 

Antwort

12

thread kopiert seine Argumente:

Zuerst werden die Konstruktor Kopien/verschiebt alle Argumente ...

std::mutex nicht kopierbar ist, damit die Fehler. Wenn Sie es unter Bezugnahme auf geben wollen, müssen Sie std::ref verwenden:

std::thread t(myf, std::ref(mtx)); 

Demo

Verwandte Themen