如何在cpp中定义volatile元素的映射

时间:2012-10-10 14:40:20

标签: c++ map volatile

我想生成互斥元素的映射,这可能需要是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 ....'“

我做错了什么?

3 个答案:

答案 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)

为什么值必须为volatilevolatile的影响与线程无关。

也就是说,问题可能只是在使用te下标运算符时隐式使用的defaukt构造函数(不幸的是你截断了错误消息,因此很难说)。尝试插入适当类型的易于构建的对。要进行查找,您需要使用地图的find()成员。