首页 > 解决方案 > 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。

有没有办法克服它?我想要一个生产者和消费者类,然后从函数传递互斥锁和 cv。

所以基本上来自 main 函数的调用应该看起来像....

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

标签: c++c++11

解决方案


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

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


推荐阅读