为啥不可能将互斥锁传递给线程?

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

【讨论】:

以上是关于为啥不可能将互斥锁传递给线程?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将带有互斥锁的仿函数传递给线程?

为啥互斥锁没有被锁定

Python的互斥锁与信号量

Go36-26-互斥锁与读写锁

Java04 线程同步问题解决——线程锁(同步锁互斥锁)

如何使用互斥锁在 C 中执行生产者-消费者程序