Wrap your reading and writing functions in a synchronization object, then only one thread at a time can access your array.
class MyArrayWrapper
{
private:
std::vector<int> MyArray;
CCriticalSection MyCC;
public:
int WriteToEnd(int Num)
{
CSingleLock cs(&MyCC);
MyArray.push_back(Num);
return MyArray.size();
}
int ReadAndRemoveFromBack()
{
CSingleLock cs(&MyCC);
int ret = MyArray.back();
MyArray.pop_back();
return ret;
}
}