반응형
출처 : http://ricanet.com/new/view.php?id=blog/050807
1. 생성과 해제를 통한 자원 획득, 해제
2. for문을 이용한 매크로
3. 2번 예제의 문제점 1 - break
ACriticalSection someCriticalSection; synchronized(someCriticalSection) { ... }
class AutoLock { public: AutoLock( ACriticalSection& cs ) : cs(cs) { cs.Lock(); cont = true; } ~AutoLock() { cs.Unlock(); } private: ACriticalSection& cs; }; { AutoLock(someCriticalSection); ... }
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())
for( ... ) { synchronized(someCriticalSection) { if( blahblah ) break; } // here } // there
4. 2번 예제의 문제점2 - VC 6.0
// May cause a problem in VC 6.0 synchronized(someCriticalSection) { ... } synchronized(someCriticalSection) { ... }
5. 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 )
반응형
'Game Dev > Scrap' 카테고리의 다른 글
Starcraft 2 Effects & Techniques (0) | 2008.08.20 |
---|---|
The Function Pointer Tutorial (0) | 2008.08.11 |
Resource Management Best Practices (0) | 2008.07.23 |
Device Lost Handling (0) | 2008.07.23 |