5

我想生成一个互斥元素的映射,它可能需要是易失的。我正在尝试定义这种东西:

typedef std::map<int key, volatile long mutex> tMutexMap;
tMutexMap myMutexMap;

然后使用简单的地图索引,例如:

myMutexMap[10]=0;
myMutexMap[23]=1;

我正在使用 gcc 4.1.2。gcc 编译器不喜欢该代码。我收到一个错误

调用 'std::pair....' 没有匹配的函数"

我究竟做错了什么?

4

3 回答 3

5

C/C++volatilevolatile某些托管语言不同,与互斥锁无关(请参阅http://www.drdobbs.com/parallel/volatile-vs-volatile/212701484)。根据您想要实现的目标考虑使用std::mutex(或者boost::mutex如果您有 C++11 之前的标准库)或std::atomic<YourPreferredIntergalType>

于 2012-11-21T09:37:10.707 回答
1

我不确定你是否可以在地图中制作 volatile 元素。您可以制作易失性地图,但不能在地图中制作价值。Map 实现为二叉树。并且有复杂的算法可以从这棵树中获取价值。Volatile 对编译器说它不应该优化对这个变量的访问。当您可以直接访问变量时,您可以使用 volatile。但是在地图中,您没有这样的直接访问权限。

于 2012-10-10T14:53:30.440 回答
0

为什么价值观需要是volatile?的影响volatile与线程无关。

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

于 2012-10-10T14:49:00.220 回答