为什么不能将mutex传递给线程?

时间:2015-07-09 03:07:00

标签: c++ multithreading mutex

将互斥引用传递给线程会导致编译错误。为什么不可能(我有多个线程使用相同的共享变量),我该如何修复它?

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

1 个答案:

答案 0 :(得分:16)

thread复制其论点:

  

首先,构造函数复制/移动所有参数......

std::mutex不可复制,因此错误。如果您想通过引用传递它,则需要使用std::ref

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

Demo