高手帮忙找一下出错的原因

wanren13 2015-09-26 04:25:01
代码1:

vector<thread> th;

for (int i = 0; i < 20; i++) {
th.push_back(thread(&SyncList<int>::push_front, &list, ref(numbers[i])));
}

for (auto& t : th) {
t.join();
}

代码2:

vector<thread> th;

for (int i = 0; i < 20; i++) {
th.push_back(thread([&]() {
list.push_front(numbers[i]);
}));
}

for (auto& t : th) {
t.join();
}

push_front函数:

template <class T>
void SyncList<T>::push_front(const T& value)
{
lock_guard<mutex> lck(mtx);
cout << "Push front " << value << endl;
vec.insert(vec.begin(), value);
cond.notify_one();
}


说明:代码1,2中list是SyncList类创建的对象,SyncList是用vector创建的类似list的类。
为什么代码2不能正常运行?改为代码1形式后正常运行。请高手指点,谢谢。
...全文
120 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanren13 2015-09-26
  • 打赏
  • 举报
回复
引用 1 楼 dustpg 的回复:
没有完整代码, 只能猜测了. 那个引用捕捉的锅吧, i应该用传递捕捉, 引用会出错. 不过这有什么意义, 这条函数总是锁着, 不如单线程提高效率.
谢谢大侠!问题解决了,就是引用i的错。
dustpg 2015-09-26
  • 打赏
  • 举报
回复
没有完整代码, 只能猜测了. 那个引用捕捉的锅吧, i应该用传递捕捉, 引用会出错. 不过这有什么意义, 这条函数总是锁着, 不如单线程提高效率.

64,637

社区成员

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

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