2015-07-09 16 views
10

Il passaggio di un riferimento mutex a un thread causa errori di compilazione. Perché non è possibile (ho più thread che usano la stessa variabile condivisa) e come lo risolvo?Perché non è possibile passare il mutex al thread?

#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; 
} 

risposta

12

thread copie i suoi argomenti:

In primo luogo le copie del costruttore/sposta tutti gli argomenti ...

std::mutex non è copiabile, quindi gli errori. Se si desidera passare per riferimento, è necessario utilizzare std::ref:

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

Demo

Problemi correlati