C++ 模板函数里面怎么加锁

在网上翻了一个任意参数打印的例子

    void print() {}
    template<typename Type, typename... Types>
    void print(const Type& arg, const Types&... args)
    {
        std::cout << arg << std::endl;
        print(args...);
    }

但是我想在里面加互斥量

    void print() {}
    template<typename Type, typename... Types>
    void print(const Type& arg, const Types&... args)
    {
        std::lock_guard<std::mutex> lock(m_mut);
        std::cout << arg << std::endl;
        print(args...);
    }

但是会马上报错

img

请问应该怎么做才对

你这个递归调用死锁了(多次对m_mut加锁)
把std::mutex替换成std::recursive_mutex即可

应该怎么做:描述清楚,编译报错还是运行报错,把报错信息放出来

(m_mut)要先创建互斥量,然后再调用,希望可以帮到你,有疑问可以继续交流