两种情况:
1. 不改变vector的元素数量, 则多线程访问无冲突。
2. 改变vector的元素数量(比如push_back, erase), 则多线程访问有冲突,需要加锁。
#include <iostream>
#include <windows.h>
#include <vector>
#include <string>
#include <mutex>
using namespace std;
#pragma comment( lib,"winmm.lib" )
struct A
{
int a;
string b;
};
vector<A*> vecA;
std::mutex m;
int N = 0;
//#define TEST_READ_WRITE
#define TEST_PUSH_DELETE
DWORD WINAPI ThreadFun1(LPVOID pParam)
{
#ifdef TEST_READ_WRITE
while (1)
{
for (vector<A*>::const_iterator it = vecA.begin(); it != vecA.end(); ++it)
{
(*it)->a = rand() % 10;
}
}
#endif
#ifdef TEST_PUSH_DELETE
DWORD lastTime = timeGetTime();
//更改vector中