Com中使用Static变量的问题,并发访问内存分配的问题,有难度,请指教,顶者有分!

qd_jyx 2006-02-15 09:57:56
程序的简单介绍:
API的类中有一个static变量
static map<const _bstr_t, StructA *> StaticA;
key是用户的passportID
1.在开始使用API时
StaticA.insert()
增加当前用户的记录
2.停止使用API时
根据当前用户的passportID
读出StaticA中存储的StructA的信息(释放资源用)
然后删除StaticA中用户的passportID对应的记录
StaticA.erase(passportID)
3.在卸载COm对象时
查询出StaticA所有的项目(释放资源用),并删除所有的项目。

问题:
并发访问时,停止使用API时,static变量在删除StaticA.erase(passportID)
和在开始使用API时 ,增加时StaticA.insert()出现了错误。
发生频率:半年一次。

原计划,将Static变量编程非Static变量,但是这样在COm卸载时的代码无法实现。

请问,有没有好的解决方法,不将Static变量编程非Static变量,而且还能解决并发访问时,静态变量内存分配和释放的问题。
...全文
171 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jagen在路上 2006-02-21
  • 打赏
  • 举报
回复
不要太依赖与STL的线程安全,必要时还是自己动手好。
shenmea00000 2006-02-21
  • 打赏
  • 举报
回复
看不明白~~~~~~~~~~
qd_jyx 2006-02-20
  • 打赏
  • 举报
回复

请走过路过的高手指点一下。
YufengShi 2006-02-20
  • 打赏
  • 举报
回复
map::insert
map::erase是线程安全的吗,
如果不是,要自己添加线程同步机制.
比如使用critical section来同步map的使用.
wshcdr 2006-02-20
  • 打赏
  • 举报
回复
看着晕晕的
pagechen 2006-02-16
  • 打赏
  • 举报
回复
The iterator provided by the map class is a bidirectional iterator, but the class member functions insert and map have versions that take as template parameters a weaker input iterator, whose functionality requirements are more minimal than those guaranteed by the class of bidirectional iterators.

你可能需要采用iterator重新实现insert和erase方法
我个人觉得insert和erase方法的多线程安全值得怀疑,而map的枚举器应该是随机访问的iterator。
qd_jyx 2006-02-16
  • 打赏
  • 举报
回复
我现在打算使用临界区来保护这个静态变量,不知道有没有需要注意的地方
Mr_Yang 2006-02-15
  • 打赏
  • 举报
回复
ls_721521 2006-02-15
  • 打赏
  • 举报
回复
顶了.谢谢!给分!
du51 2006-02-15
  • 打赏
  • 举报
回复
我是来顶的.

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧