• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Lock과 SpinLock 질문

23.02.03 19:16 작성 23.02.03 19:17 수정 조회수 475

0

안녕하세요 이 강의를 수강하기 앞서 학교 강의에서

C++을 통해 멀티쓰레드 개념을 살짝 배운 상태입니다.

 

C#을 대상으로 하는 강의라 조금 동떨어진 느낌이 있지만 언리얼 쪽으로도 강의하시는거 보고 혹시 알고계실까 해서 질문합니다.

 

  1. C#의 lock과 C++의 unique_lock<mutex>가 상당히 흡사해 보이는데 맞나요? 차이점이 있을까요?

 

  1. C++에선 mutex라는 것을 사용했는데 C#에서는 object로 할 수 있는 이유? 그러는 이유? 가 궁금합니다.

 

  1. Spin Lock이 Busy Wait 방식으로 lock이 풀리길 기다리는 방식을 뜻하는 것 같은데, C++에서는 condition_variable와 같은 것으로 CPU를 무의미하게 점유하는 것을 막았던 것으로 기억납니다. lock이나 condition_variable을 사용하지 않고 이런 방식을 사용하는 이유가 있는지 알 수 있을까요.

답변 1

답변을 작성해보세요.

0

  1. C# lock = C++ mutex 이고요 (표준에서 제공하는 락)
    C# using (...) = C++ unique_lock(...) or lock_guard(...) 로 생각할 수 있습니다.

  2. 구글에서 C# object, lock 원리에 대해 검색해보시기 바랍니다.

  3. CV는 당연히 C#에도 존재합니다. CV까지 가지 않고 스핀락을 사용하는게 유용한 경우는
    정말 정말 락 거는 시간이 짧을 것으로 예상될 때입니다. (단순한 매니저 get set 이라거나)

    그러면 오히려 이벤트 방식이나 CV와 같이 한 단계 거치는 방식보단 더 효율적일 수도 있겠죠.