C++ STL queue 多线程报错:dereferencable

发布于 2022-09-11 15:50:29 字数 594 浏览 9 评论 0

如下,主线程循环调用 push() ,第二个线程 front() 读队首,队空时忙等,结果第11行 front() 处报错 deque iterator not dereferencable,看了一下 STL deque 的实现,感觉这两个操作不应该冲突啊?

#include "stdafx.h"

using namespace std;

queue<int>Q;
bool going = true;

void thread1() {
    while (going || !Q.empty()) {
        while (!Q.empty()) {
            int x = Q.front(); Q.pop();
        }
    }
}

int main()
{
    thread th(thread1);
    for (int i = 1; i <= 10000; i++)
        Q.push(i);
    going = false;
    th.join();
    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

阪姬 2022-09-18 15:50:29

stl里的容器都不是线程安全的,使用的时候注意加锁

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文