中易网

C++ 多线程 操作List 的问题

答案:2  悬赏:30  
解决时间 2021-04-22 18:41
// TestList.cpp : 定义控制台应用程序的入口点。//
#include "stdafx.h"#include #include #include using namespace std;
DWORD WINAPI ProcData(LPVOID lparam){ std::list* lst=(std::list*)lparam; int num=0; while (true) { if(!lst->empty()) { num=lst->front();
//在这里pop的时候有几率的出错。 lst->pop_front(); printf("%d",num); } Sleep(3); }}
int _tmain(int argc, _TCHAR* argv[]){ std::list IntList; CreateThread(NULL,0,ProcData,(LPVOID)&IntList,0,NULL); int index=0; while (true) { IntList.push_back(index++); Sleep(5); } return 0;}
报错如图。请各位帮忙看看。。谢谢



最佳答案
STL本身不是线程安全的

这个例子里 你最好使用互斥锁或者其他方法
全部回答
你说的就是线程间的同步问题; 当我们设置一个变量时 如int a=3; 数据是在内存条中存储的; 当计算机去计算a+1=多少时,cpu会将内存中的数据读取到 cpu的高速缓存中(在cpu内部),然后再计算。并将计算后的值再写会内存中; 当多线程操作这个变量时,一个线程把他给改了(在cpu中,还未更新到内存中),另一个线程去读时,都取得内存条中的数据还是老的。所以要lock一下,让另一个线程无法操作!更新完你再去操作! 除了lock以外还有好多种线程同步方式,比如createevent函数。。。百度一下相关资料学习下。线程同步也不难的! 有问题继续问~~~
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
对外表完全没有信心的我该怎么办?
景德鎮可以打工的地方有那些???
我家的问道什么都好着.为什么进不去啊
南屏派出所在什么地方啊,我要过去处理事情
庙街故事演轮王的是谁
关于阅兵式的观后感应该怎样写?
浚县领导班子成员名单
金堂大学城哪里可以修手机啊,要原装的,价格
为什么我会很开心呢?
为什么空间自定义装扮添加模块不成功啊
梦幻西游,追忆青山绿水,109最强大唐是哪个
你是我纯白时光里最单纯的想念是什么意思?求
男孩和女孩相拥,男孩手该放哪?
星锐(潍坊鲁益店)地址有知道的么?有点事想过
第九代索纳塔混合动力是什么意思
推荐资讯
寻零度可口可乐积分兑换码
电脑上装的采集卡监控摄像头怎么录像啊?
阿里小钱怎么开通 阿里小钱怎么申请
薇妮化妆品专卖NO.0685地址在哪,我要去那里
美味坊手擀面地址有知道的么?有点事想过去
求20149月1日开学第一课读后感
哺乳的妈妈可以去拔牙么?
我是长江大学的护理本科生,想去301医院实习
高中数学导数零点问题,不是很难,赐教!
江苏地区谁的初三的物理好、、???速度、、
在线电影用什么看比较好
关于《舞者》、海岩为什么要写这样悲的结局?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?