【发布时间】:2014-09-19 19:20:37
【问题描述】:
我有一个包含一些变量的类,比如一个列表和一个布尔值,可以由多个线程写入,因此使用它们自己的互斥锁进行保护:
class Motel
{
// [...]
private:
list<Room> _rooms;
boost::mutex _rooms_mtx;
bool _opened;
boost::mutex _opened_mtx;
}
这段代码的问题是当我需要一个复制构造函数或 operator=(甚至是自动生成的)时,我想将类放在地图中:
boost::map<string, Motel> all_motels;
Motel grenoble(...);
all_motels["Grenoble"] = grenoble;
这是禁止的,因为我们不能复制互斥锁:
/usr/include/boost/thread/pthread/mutex.hpp: In copy constructor ‘project::Motel::Motel(const project::Motel&)’:
/usr/include/boost/thread/pthread/mutex.hpp:33:9: error: ‘boost::mutex::mutex(const boost::mutex&)’ is private
在这种情况下我该怎么办? 提前谢谢你
【问题讨论】:
-
编写你自己的复制ctor / 复制赋值运算符等不复制互斥体?
-
复制和赋值的预期语义是什么?
标签: c++ thread-safety mutex member