Yes, you have to syncronize them. Yes, you can use a critical section. If there is only one shared resource you can use a simple lock:
Code:
struct sentry {
sentry(bool & key);
~sentry();
void lock();
void unlock();
bool & _locked;
bool mine;
};
sentry(bool & key, bool now = false)
:_locked(key)
{
mine = false;
if(now)
lock();
}
~sentry()
{
unlock();
}
void lock()
{
if(!mine)
{
while(_locked)
continue;
mine = _locked = true;
}
}
void unlock()
{
if(mine)
{
mine = _locked = false;
}
}
//global vector
std::vector<Object> objects;
bool key = false;
//main code
sentry gate(key);
gate.lock();
objects.back().doSomething();
gate.unlock();
//thread code
sentry gate(key, true);
objects.pop_back();
gate.unlock();