我想生成互斥元素的映射,这可能需要是volatile。 我试图定义这种东西:
typedef std::map<int key, volatile long mutex> tMutexMap;
tMutexMap myMutexMap;
然后使用简单的地图索引,例如:
myMutexMap[10]=0;
myMutexMap[23]=1;
我正在使用gcc 4.1.2。 gcc编译器不喜欢该代码。我收到错误
没有匹配函数来调用'std :: pair ....'“
我做错了什么?
答案 0 :(得分:5)
C / C ++的volatile
与某些托管语言中的volatile
不同,与互斥锁无关(请参阅http://www.drdobbs.com/parallel/volatile-vs-volatile/212701484)。根据您要实现的目标,请考虑使用std::mutex
(如果您有预先C ++ 11标准库,则为boost::mutex
)或std::atomic<YourPreferredIntergalType>
答案 1 :(得分:1)
我不确定你是否可以在地图中制作易变元素。你可以在地图中制作易变的地图而不是价值。 映射实现为二叉树。并且有一种复杂的算法可以从这棵树中获取价值。 Volatile告诉编译器它不应该优化对这个变量的访问。当您可以直接访问变量时,可以使用volatile。但是在地图中你没有这种直接访问权。
答案 2 :(得分:0)
为什么值必须为volatile
? volatile
的影响与线程无关。
也就是说,问题可能只是在使用te下标运算符时隐式使用的defaukt构造函数(不幸的是你截断了错误消息,因此很难说)。尝试插入适当类型的易于构建的对。要进行查找,您需要使用地图的find()
成员。