(C# : Server) Context Switching

Posted by : at

Category : Charp-Server


class SpinLock
{
    volatile int _locked = 0;

    public void Acquire()
    {
        while(true)
        {
            int expected = 0;
            int desire = 1;
            int original = Interlocked.CompareExchange(ref _locked, desire, expected);
            if(original == 0)
                break;

            // 쓰레드를 쉬게 하는 방법은 세 가지가 있다
            Thread.Sleep(1);    // 무조건 1ms를 쉬어라
            Thread.Sleep(0);    // 조건부 양보 -> 자신보다 우선순위가 낮은 쓰레드에게는 양보 불가
            Thread.Yield();     // 관대한 양보 -> 조건없이 쓰레드 우선권 양보
        }
    }

    public void Release()
    {
        _locked = 0;
    }
}
  • Context Switching
    • 쓰레드의 권한이 이전되며 필요한 데이터를 캐시에 저장하는데
    • 그 필요한 데이터 복사 시간이 필요해진다.
    • 따라서 너부 빈번한 쓰레드 권한 이전은 오히려 단점이 된다

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links