为啥不可能将互斥锁传递给线程?
Posted
技术标签:
【中文标题】为啥不可能将互斥锁传递给线程?【英文标题】:Why is passing mutex to thread not possible?为什么不可能将互斥锁传递给线程? 【发布时间】:2015-07-09 03:06:59 【问题描述】:将互斥引用传递给线程会导致编译错误。为什么不可能(我有多个线程使用同一个共享变量),我该如何解决?
#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】:thread
复制其参数:
首先构造函数复制/移动所有参数...
std::mutex
不可复制,因此出现错误。如果要通过引用传递,需要使用std::ref
:
std::thread t(myf, std::ref(mtx));
Demo
【讨论】:
以上是关于为啥不可能将互斥锁传递给线程?的主要内容,如果未能解决你的问题,请参考以下文章