ACriticalSection someCriticalSection;
synchronized(someCriticalSection)
{
...
}
synchronized(someCriticalSection)
{
...
}
C++ ̷ ڵ带 ŷ ڴٴ ϴ. Lock() Unlock() ȣ ߰ ų ϴ ʿ º ߰ǰų ڵ尡 ϱ.
class AutoLock
{
public:
AutoLock( ACriticalSection& cs ) : cs(cs)
{
cs.Lock();
cont = true;
}
~AutoLock()
{
cs.Unlock();
}
private:
ACriticalSection& cs;
};
{
public:
AutoLock( ACriticalSection& cs ) : cs(cs)
{
cs.Lock();
cont = true;
}
~AutoLock()
{
cs.Unlock();
}
private:
ACriticalSection& cs;
};
{
AutoLock(someCriticalSection);
...
}
AutoLock(someCriticalSection);
...
}
ؼ ' ü ڵ Ҹ ڿ 뱸' , synchronized() ͺ ڵ尡 ʽϴ. ̸ ôµ, Ѱ . ( ģ ڱ ȸ翡 synchronized() ũθ ٴ ⸦ ֱ , Ŷ Ȯ ־ŵ)
class AutoLock
{
public:
AutoLock( ACriticalSection& cs ) : cs(cs)
{
cs.Lock();
cont = true;
}
~AutoLock()
{
cs.Unlock();
}
void P()
{
cont = false;
}
bool C()
{
return cont;
}
private:
ACriticalSection& cs;
bool cont;
};
#define synchronized(A) for(AutoLock _syncVar(A); _syncVar.C(); _syncVar.P())
{
public:
AutoLock( ACriticalSection& cs ) : cs(cs)
{
cs.Lock();
cont = true;
}
~AutoLock()
{
cs.Unlock();
}
void P()
{
cont = false;
}
bool C()
{
return cont;
}
private:
ACriticalSection& cs;
bool cont;
};
#define synchronized(A) for(AutoLock _syncVar(A); _syncVar.C(); _syncVar.P())
for ѹ ǵ ϰ, _syncVar ڵ ǵ մϴ. ! ! ( `)
ֽϴ. ٸ for Ѵٴ ε, Ʒ ڵ带 .
for( ... )
{
synchronized(someCriticalSection)
{
if( blahblah )
break;
}
// here
}
// there
{
synchronized(someCriticalSection)
{
if( blahblah )
break;
}
// here
}
// there
߰ if blahblah Ǹ, ڵδ there ; , synchronized for DZ here ϴ. synchronized forϱ break continue foró ۵ Ŷ ο ΰ (ǰϴϱ). ̴ ˴ϴ.
Դٰ Visual C++ 6 for Ȯ ó ϴ ƿ ϴ.
// VC6 ٺ Ǵ ǥ ̽
synchronized(someCriticalSection)
{
...
}
synchronized(someCriticalSection)
{
...
}
synchronized(someCriticalSection)
{
...
}
synchronized(someCriticalSection)
{
...
}
, - ϰ ã ýϴ.
ٷ . :D
Ȱ
if
ι° ũ а if ٽ ýϴ.
class AutoLock
{
public:
AutoLock( ACriticalSection& cs ) : cs(cs)
{
cs.Lock();
}
~AutoLock()
{
cs.Unlock();
}
operator bool()
{
return true;
}
private:
ACriticalSection& cs;
};
#define synchronized(A) if( AutoLock _syncVar = A )
{
public:
AutoLock( ACriticalSection& cs ) : cs(cs)
{
cs.Lock();
}
~AutoLock()
{
cs.Unlock();
}
operator bool()
{
return true;
}
private:
ACriticalSection& cs;
};
#define synchronized(A) if( AutoLock _syncVar = A )
˴ϴ+_+!
ڵ嵵 ξ ª, for ɵ پϴ. if ȿ ο ִ ó . (...)
ϳ !
VC6 ۵մϴ. (...)

ƴϵüifóϰfor¾ȱ
. ACriticalSection 꿡 ''/
