C++ 多线程 操作List 的问题
答案:2 悬赏:30
解决时间 2021-04-22 18:41
- 提问者网友:我稀罕你
- 2021-04-21 23:13
// 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;}
报错如图。请各位帮忙看看。。谢谢
最佳答案
- 二级知识专家网友:滚出爷的世界
- 2021-04-21 23:18
STL本身不是线程安全的
这个例子里 你最好使用互斥锁或者其他方法
全部回答
- 1楼网友:疯山鬼
- 2021-04-22 00:11
你说的就是线程间的同步问题;
当我们设置一个变量时 如int a=3; 数据是在内存条中存储的;
当计算机去计算a+1=多少时,cpu会将内存中的数据读取到 cpu的高速缓存中(在cpu内部),然后再计算。并将计算后的值再写会内存中;
当多线程操作这个变量时,一个线程把他给改了(在cpu中,还未更新到内存中),另一个线程去读时,都取得内存条中的数据还是老的。所以要lock一下,让另一个线程无法操作!更新完你再去操作!
除了lock以外还有好多种线程同步方式,比如createevent函数。。。百度一下相关资料学习下。线程同步也不难的!
有问题继续问~~~
我要举报
大家都在看
推荐资讯