场景:
1. 有时候需要使用vector 或 map作为多线程的共享变量, map是tree结构, 读和写方法都不是线程安全的, 即同时读写会有崩溃的现象.
2. std::vector直观来说只用push_back和[] 下标访问操作应该没问题,push_back往后边加对象, 索引值只访问已经存储的变量(预先求size).注意, 这里不会删除vector元素.
可惜,这种多线程操作还是会崩溃. 单线程写和单线程读!!!
看代码:
test_vector.cpp
#include "gtest/gtest.h"
#include <vector>
#include <iostream>
#include <Windows.h>
#include "pthread.h"
class A
{
public:
A(int i):i_(i){}
int i_;
};
void* first = NULL;
void* second = NULL;
static void* Push(void* data)
{
std::vector<A*>& vec = *(std::vector<A*>*)data;
vec.push_back(new A(-1));
first = std::addressof(vec._Myfirst);
//std::cout << first << std::en