void foo() { volatile static long initialized; static CRITICAL_SECTION cs; if(InterlockedIncrement(&initialized) == 1) { InitializeCriticalSection(&cs); } initialized = 1; EnterCriticalSection(&cs); /* Do synchronized operation */ LeaveCriticalSection(&cs); }