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

mou*_*mer 5 c++ volatile map

我想生成互斥元素的映射,这可能需要是volatile.我试图定义这种东西:

typedef std::map<int key, volatile long mutex> tMutexMap;
tMutexMap myMutexMap;
Run Code Online (Sandbox Code Playgroud)

然后使用简单的映射索引,例如:

myMutexMap[10]=0;
myMutexMap[23]=1;
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么?

Arn*_*rtz 5

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


小智 1

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