2015-07-09 19 views
10

Bir iş parçacığına bir muteks başvurusu geçirme, derleme hatalarına neden olur. Neden bu mümkün değil (aynı paylaşılan değişkeni kullanarak birden fazla iş parçacığım var) ve bunu nasıl düzeltebilirim?Neden muteks iş parçacığına geçirilemiyor?

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

cevap

12

thread kopya onun argümanları:

İlk yapıcı kopya/

std::mutex, dolayısıyla hatalar copyable değil ... tüm argümanları taşır. Eğer referans olarak geçmek istiyorsanız, std::ref kullanmak gerekir:

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

Demo

İlgili konular