多线程操作链表问题

YY_kici 2014-05-04 01:56:36
有两个线程操作同一个链表
list<int> list;

线程1
list<int>::iterator it = list.begin();
加锁
for(; it != list.end; it++)
{
printf("%d", *it);
}
解锁

线程2
list<int>::iterator it = list.begin();
加锁
for(; it != list.end; it++)
{
if((*it) == 1)
{
list.erase(it);
break;
}
}
解锁
有什么问题么?这么写..谢谢
...全文
442 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
YY_kici 2014-05-04
  • 打赏
  • 举报
回复
引用 5 楼 sd530842780 的回复:
[quote=引用 4 楼 YY_kici 的回复:] [quote=引用 3 楼 lm_whales 的回复:] 有两个线程操作同一个链表 list<int> list; 线程1 加锁 list<int>::iterator it = list.begin(); for(; it != list.end; it++) { printf("%d", *it); } 解锁 线程2 加锁 list<int>::iterator it = list.begin(); for(; it != list.end; it++) { if((*it) == 1) { list.erase(it); break; } } 解锁 这样才能比较安全,因为erase改变了 list的结构,iterator 会因此失效
list.erase(it); 这样删除元素有问题么??[/quote] 有问题,应该是 list.erase(it++);把上面循环里面的++去掉[/quote] 好我试试.谢谢你.~能加你QQ么?
不要做咸鱼 2014-05-04
  • 打赏
  • 举报
回复
引用 4 楼 YY_kici 的回复:
[quote=引用 3 楼 lm_whales 的回复:] 有两个线程操作同一个链表 list<int> list; 线程1 加锁 list<int>::iterator it = list.begin(); for(; it != list.end; it++) { printf("%d", *it); } 解锁 线程2 加锁 list<int>::iterator it = list.begin(); for(; it != list.end; it++) { if((*it) == 1) { list.erase(it); break; } } 解锁 这样才能比较安全,因为erase改变了 list的结构,iterator 会因此失效
list.erase(it); 这样删除元素有问题么??[/quote] 有问题,应该是 list.erase(it++);把上面循环里面的++去掉
YY_kici 2014-05-04
  • 打赏
  • 举报
回复
引用 3 楼 lm_whales 的回复:
有两个线程操作同一个链表 list<int> list; 线程1 加锁 list<int>::iterator it = list.begin(); for(; it != list.end; it++) { printf("%d", *it); } 解锁 线程2 加锁 list<int>::iterator it = list.begin(); for(; it != list.end; it++) { if((*it) == 1) { list.erase(it); break; } } 解锁 这样才能比较安全,因为erase改变了 list的结构,iterator 会因此失效
list.erase(it); 这样删除元素有问题么??
lm_whales 2014-05-04
  • 打赏
  • 举报
回复
有两个线程操作同一个链表 list<int> list; 线程1 加锁 list<int>::iterator it = list.begin(); for(; it != list.end; it++) { printf("%d", *it); } 解锁 线程2 加锁 list<int>::iterator it = list.begin(); for(; it != list.end; it++) { if((*it) == 1) { list.erase(it); break; } } 解锁 这样才能比较安全,因为erase改变了 list的结构,iterator 会因此失效
YY_kici 2014-05-04
  • 打赏
  • 举报
回复
引用 1 楼 lianshaohua 的回复:
这样不安全的
怎么个不安全法??
ztenv 版主 2014-05-04
  • 打赏
  • 举报
回复
这样不安全的

64,637

社区成员

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

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