c++ STL不是线程安全的,因此在多线程中使用的时候,操作同一个容器,会崩溃,因此需要解决线程安全的问题:
使用实例类似于以下:
#include <thread>
#include <vector>
#include "thread_safe_vector.h"
using namespace std;
thread_safe::vector<CString> g_vecData;
void func1()
{
for (int i = 0; i < 40;i++)
{
CString str1;
str1.Format(L"vec:%d", i);
g_vecData.push_back(str1);
AfxMessageBox(str1);
}
}
void func2()
{
for (auto &_info : g_vecData)
{
AfxMessageBox(_info);
}
}
void CThreadDemoDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//CDialogEx::OnOK();
thread t1(func1);
t1.detach();
thread t2(func2);
t2.detach();
}