多线程中map全局变量有问题,求解

大海雪山 2010-12-30 03:04:03
rt,使用全局变量

// 自定义结构体
typedef struct _MYSTRUCT
{
SOCKET s; // 套节字句柄
int olCount;//在线计数器
}MYSTRUCT, *PMYSTRUCT;
std::map<char*, MYSTRUCT> g_map;//全局变量
std::map<char*, MYSTRUCT>::iterator g_mapiterator;
建立线程池,在线程处理函数中执行Insert操作,
ThreadProc()
{
g_map.insert(。。。);此处插入

}
运行后,创建两个线程,线程1中g_map插入v1,线程2中执行插入v2操作,
我希望实现的是,线程1和2共享map,即加入同一个红黑树中。
但实际,结果是,两个线程插入时,都是单独的,线程1中插入的数据,在线程2中无法看到。
因为刚开始接触stl,查资料说stl线程安全的问题,具体原因还请各位大虾指点。
另,如何实现多线程下map数据的共享!谢谢。
...全文
773 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayw215 2011-01-04
  • 打赏
  • 举报
回复
stl非线程安全,所有的多线程对stl容器的操作,都要加锁
arong1234 2011-01-01
  • 打赏
  • 举报
回复
不要只抄片断代码,在你不懂得前提下,你抄的节略只能隐藏错误,不会让大家发现错误[Quote=引用 10 楼 sandy0066 的回复:]
谢谢各位指点(顺便祝大家元旦快乐哈)。
可我加了临界区后,还是不行,期待。。。
[/Quote]
大海雪山 2011-01-01
  • 打赏
  • 举报
回复
谢谢各位指点(顺便祝大家元旦快乐哈)。
可我加了临界区后,还是不行,期待。。。
PG 2010-12-30
  • 打赏
  • 举报
回复
易用的框架,一条简单的指令,内部操作就可能相当的复杂了。。

还是劝楼主:加加锁,更健康~!
  • 打赏
  • 举报
回复
但实际,结果是,两个线程插入时,都是单独的,线程1中插入的数据,在线程2中无法看到。
因为刚开始接触stl,查资料说stl线程安全的问题,具体原因还请各位大虾指点。


结果是未定义的,stl多不是线程安全,你可以试下多线程string浅拷贝,也有问题的。
你还是加锁再来看结果吧
cnlm2 2010-12-30
  • 打赏
  • 举报
回复
map不是线程安全的
xpston008 2010-12-30
  • 打赏
  • 举报
回复
多线程共享数据,必须要加锁。多线程共享数据是没有问题的

在插入和使用时各输出一下map的数据个数。这样来查问题。、



luciferisnotsatan 2010-12-30
  • 打赏
  • 举报
回复
全局变量本来就是读线程共享的呀

lz再仔细看看
pengzhixi 2010-12-30
  • 打赏
  • 举报
回复
stl里面都不是线程安全的。所以在操作时候要加锁。
whslovexyp 2010-12-30
  • 打赏
  • 举报
回复
你怎么认定2个map是单独的呢
varding 2010-12-30
  • 打赏
  • 举报
回复
会有线程安全问题,但肯定能访问的
野男孩 2010-12-30
  • 打赏
  • 举报
回复
全局变量的map,怎么可能一个线程插入的数据,另一个线程看不到。。。。。

没道理的,仔细检查一下吧。

65,184

社区成员

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

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