【发布时间】:2019-05-19 02:10:55
【问题描述】:
我是 C++ 11 的新手并使用线程。我遇到了一个无法复制互斥锁和条件变量对象的场景。代码是这样的......
class producer {
public:
producer(mutex m, condition_variable cv)
{
mut = m; // ERROR
cvar = cv; // ERROR
}
private:
mutex mut;
condition_variable cvar;
}
当试图在构造函数中复制变量时,它给出了错误。似乎复制构造函数设置为删除 mutex 和 cv。
有办法克服吗?我想要一个生产者和消费者类,然后从 main 函数传递互斥量和 cv。
所以基本上来自主函数的调用应该看起来像......
int main ()
{
mutex m;
condition_variable cv;
//Initialize mutex & cv
producer prod(m, cv);
}
【问题讨论】:
-
想想拥有多个互斥体副本会带来什么样的恐怖。您可以围绕共享指针之类的东西构建内部,以便所有副本都引用相同的底层互斥体,但这会对只想使用互斥体而不传递它的每个人造成惩罚。
-
互斥锁旨在保护资源。与其传递互斥锁,不如考虑将资源和互斥锁封装在一个类中,然后传递该类的一个实例。在一天结束时,您将遇到与互斥锁不可复制的相同问题,封装对象也是如此,但是更好地描述了意图,您可以使用该类来防止访问资源而不获取互斥锁.
-
当你有
mutex数据成员时如何写你的特殊成员:stackoverflow.com/a/29988626/576911