社区
C++ 语言
帖子详情
STL MAP容器,如何当作线程参数传递给线程?
qwert1643ou65923
2011-09-15 08:57:27
map<string,HANDLE> mapComMgr;
我需要把mapComMgr 容器传递给 pthread_create的线程参数,我应该怎么传递,在线程主函数中我又如何转换呢?我需要的是指针,因为这个容器会动态改变,我要知道他改变的所有值!
知道的说下,谢谢!
...全文
220
13
打赏
收藏
STL MAP容器,如何当作线程参数传递给线程?
map mapComMgr; 我需要把mapComMgr 容器传递给 pthread_create的线程参数,我应该怎么传递,在线程主函数中我又如何转换呢?我需要的是指针,因为这个容器会动态改变,我要知道他改变的所有值! 知道的说下,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mstlq
2011-09-15
打赏
举报
回复
(map<string,HANDLE> *)p
这样就转回来了
qwert1643ou65923
2011-09-15
打赏
举报
回复
传递进线程过后呢 ?
怎么转?
luciferisnotsatan
2011-09-15
打赏
举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]
转为void*.然后在线程函数里面转回来即可。
[/Quote]
正解
Qlaiaqu
2011-09-15
打赏
举报
回复
线程的话,还是用共享变量吧,
mengmingtao
2011-09-15
打赏
举报
回复
干嘛要当做参数传送呢。本身它就在进程空间的话,线程是可以访问到它的。直接拿来用就是了。
PG
2011-09-15
打赏
举报
回复
[Quote=引用 4 楼 babilife 的回复:]
可以结贴了
[/Quote]
+
qingcairousi
2011-09-15
打赏
举报
回复
自己封装一个线程对象吧,没多复杂的。
qq120848369
2011-09-15
打赏
举报
回复
pthread_create(......,&mapComMgr);
chenjiawei007
2011-09-15
打赏
举报
回复
可以写个MAP管理类,MAP当做类成员,再将类指针传入到线程即可。
至善者善之敌
2011-09-15
打赏
举报
回复
可以结贴了
forcomponent
2011-09-15
打赏
举报
回复
LS正解....强转为void*
线程里处理的时候再强转mapComMgr*既可
pengzhixi
2011-09-15
打赏
举报
回复
转为void*.然后在线程函数里面转回来即可。
taodm
2011-09-15
打赏
举报
回复
当然是转为void *啊。
深入解析C++
STL
中的常用
容器
里我们不涉及
容器
的基本操作之类,只是要讨论一下各个
容器
其各自的特点。
STL
中的常用
容器
包括:顺序性
容器
(vector、deque、list)、关联
容器
(
map
、set)、
容器
适配器(queue、stac)
safe-
map
:安全的
安全地图 作者:Karen Pease( ) 许可证:公共领域。 尽你所能! 没有明示或暗示的担保。 介绍
线程
对许多现代应用程序至关重要,最新的C ++标准使启动
线程
和控制锁变得容易。 不幸的是,
STL
容器
本身不是
线程
安全的。 尽管可以通过为
容器
保留一个互斥锁并为每个操作锁定它来解决单个
容器
函数调用的非原子性,但是不幸的是,这不能使迭代器安全到地图。 即使具有智能指针的映射也不会削减它-迭代器包含指向智能指针的指针,但不包含指向智能指针本身的指针,因此不会保留引用。 有几种方法可以解决此问题。 例如,英特尔的TBB包含多个“
线程
安全”
容器
。 不幸的是,您会发现它们对保留迭代器也不起作用-它们仅确保原子操作。 另一种选择是跳过使用迭代器,仅存储密钥。 但这意味着每次您要使用迭代器时都进行键查找-即使是简单的增量也是如此。 这可能很慢,尤其是在需要排序的情况下(映射与哈希)。 使用这种
STL
容器
的
线程
安全性?
需要注意的是,即使
STL
容器
本身是
线程
安全的,但在多
线程
环境下使用时,仍需要注意对迭代器的操作可能会引起
容器
的
线程
安全问题。如
map
,set,unordered_
map
,unordered_set)和无序
容器
(如 unordered_
map
,unordered_set)的
线程
安全版本为其加了。(如 vector,deque,list,forward_list,string)的
线程
安全版本为其加了 _safe 后缀,例如 std::vector。t 后缀,例如 std::
map
_mt。
STL
容器
的
线程
安全
众所周知,
STL
容器
不是
线程
安全的。 对于vector,即使写方(生产者)是单
线程
写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效。实际表现也就是招致了core dump。另外一种情况,如果是多个写方,并发的push_back(),也会导致core dump。 解法一: 加锁是一种解决方案,但是加std::mutex互斥锁确实性能较差。对于多读少写的场景可以用读写锁(也叫共享独占锁),来缓解。C++17引入了std::shared_mutex 。更多锁的种类可以
C++
STL
容器
部分操作多
线程
不安全
最近项目中发现一个c++
stl
容器
多
线程
查找可能出现CPU占用率100%的问题。 问题是这样的,
线程
A和
线程
B共享一个
stl
::
map
。其中
线程
A对
map
有查找的操作,
线程
B对
map
有删除的操作。收集其core文件后发现
线程
A一直在
map
的查找中循环。看
map
查找函数中确实用一个while循环实现。确定为
线程
B删除了
线程
A查找的值导致
线程
A中陷入了
map
表查找死循环中。 总结:C++
C++ 语言
64,642
社区成员
250,580
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章