// そこで、こんなクラスを作って見ようと思った。
// これは、単一のオブジェクトをロックする。
class AutomaticSynchronizer {
    HANDLE mutex;
public:
    AutomaticSynchronizer::AutomaticSynchronizer( void* resource ) {
        char mutexName[100];
        sprintf( mutexName, "AutomaticSynchronizer:[0x%08X]", resource );
        resouces = CreateMutex( NULL, FALSE, mutexName );
        WaitForSingleObject( mutex, INFINITE );
    }
    AutomaticSynchronizer::~AutomaticSynchornizer() {
        ReleaseMutex( mutex );
    }
};

// スレッドセーフ版( AutomaticSynchronizerの使用例 )
int foo2( int i ) {
    AutomaticSynchronizer as( sObject ); // 自動変数として、インスタンスを作る
    if( i == 0 ) {
        return -1; // 普通にエラーリターン
    } else if( i < 0 ) {
        throw e; // 普通に例外を投げる
    }
    return var( i ); // 普通に委譲
}

// foo1()とfoo2()、どっちが簡単?