关于多线程操作list的问题,创建两个线程 一个在list头部添加数据 另一个在list尾部删除数据?

Adonis321 2016-10-24 05:00:42
#include<iostream>
#include<thread>
#include<mutex>
#include<windows.h>
#include <list>
#include <exception>
using namespace std;
list<int> list_test;
int j = 0;
int i = 0;

void push();
void pop();
int get();

int main() {

thread push1(push);
//push();
Sleep(500);
thread pop1(pop);

return 0;
}
void push() {
list_test.clear();

while (1)
{
if (list_test.size() >= 10000)
{
//list_test.clear();
//return;
continue;
}
else {
i++;
list_test.push_front(i);
cout << "push线程 " << list_test.size() << endl;
}
}
}

void pop() {

while (1) {
if (list_test.size() <= 1)
{
//Sleep(00);
}
else
{
j = list_test.back();
list_test.pop_back();
//cout << "pop线程 " <<j<< endl;
}
}
}

int get() {
return j;
}
...全文
859 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-10-25
  • 打赏
  • 举报
回复
你不能期望STL给你线程支持,它要的是效率。
1. 多个读是安全的。多线程可同时读取一个容器内容。当然,在读时不能有任何写入操作这个容器。
2. 对不同容器的多个写入是安全的。多线程可以同时写不同容器。 注意,是不同容器。
silenci 2016-10-25
  • 打赏
  • 举报
回复
我之前的回答错了,还是用mutex::lock吧
silenci 2016-10-25
  • 打赏
  • 举报
回复
加个信号量?
赵4老师 2016-10-25
  • 打赏
  • 举报
回复
《Windows核心编程》
gldcpp 2016-10-24
  • 打赏
  • 举报
回复
entercriticalsection
ztenv 版主 2016-10-24
  • 打赏
  • 举报
回复
不加锁肯定会出现问题

64,646

社区成员

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

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