C++ 11 : Mutex & Condition Variable Cannot be Copied

标签 c++ c++11

我是 C++ 11 新手,正在使用线程。我遇到了一个场景,无法复制互斥体和条件变量对象。代码是这样的......

class producer {

   public: 
      producer(mutex m, condition_variable cv) 
      {
           mut = m;    // ERROR
           cvar = cv;   // ERROR
       }

    private:
         mutex mut;
         condition_variable cvar;
}

当尝试复制构造函数中的变量时,会出现错误。似乎复制构造函数设置为删除互斥体和 cv。

有办法克服吗?我想要一个生产者和消费者类,然后从 ma​​in 函数传递互斥体和 cv。

所以基本上主函数的调用应该是这样的......

int main ()
{
    mutex m;
    condition_variable cv;
    //Initialize mutex & cv
    producer prod(m, cv);
}

最佳答案

不,这是不可能的。在 C++ 中添加了一些功能来启用此功能(非复制)。

如果您考虑一下实现,您是否会更改某种内核对象?那会是一样的吗。可能不会。这是设计使然。

关于C++ 11 : Mutex & Condition Variable Cannot be Copied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56204230/

相关文章:

c++ - 运算符重载 c++ (<<)

c++ - 类型列表上的编译时映射

c++ - 如何将 int 映射到 C/C++ 中的相应字符串

c++11 - 带回调的异步 future 。 C++11

c++ - 通过类型转换切掉重写的方法

c++ - 使用 RcppArmadilloExtensions/sp_mat.h 从矩阵到 Armadillo 的稀疏矩阵转换

c++ - 持有共享资源的类的合理设计

c++ - 字符数组的初始值设定项字符串对于 char[] 而言太长

c++ - 限制嵌套结构中的构造函数范围

c++ - 使用 VS2010 SP1 的函数模板中的编译器错误