class CSPINLOCK{

volatile LONG into;

public:

void Lock1();

void Lock2();

void Unlock();

};

CSPINLOCK::CSPINLOCK()

: into(0)

{
}

void CSPINLOCK::Lock1()

{

     while( 0 != ::InterlockedExchange(&into, 1) );
}

void CSPINLOCK::Lock2()

{

     for(;;)

   {

       while(into);


       if(0 == ::InterlockedExchange(&into, 1))

         break;

   }

}

void CSPINLOCK::Unlock();

{

     ::InterlockedExchange(&into, 0);
}










Lock1이 빠르냐 Lock2가 빠르냐