작성
·
602
·
수정됨
0
안녕하세요 이 강의를 수강하기 앞서 학교 강의에서
C++을 통해 멀티쓰레드 개념을 살짝 배운 상태입니다.
C#을 대상으로 하는 강의라 조금 동떨어진 느낌이 있지만 언리얼 쪽으로도 강의하시는거 보고 혹시 알고계실까 해서 질문합니다.
C#의 lock과 C++의 unique_lock<mutex>가 상당히 흡사해 보이는데 맞나요? 차이점이 있을까요?
C++에선 mutex라는 것을 사용했는데 C#에서는 object로 할 수 있는 이유? 그러는 이유? 가 궁금합니다.
Spin Lock이 Busy Wait 방식으로 lock이 풀리길 기다리는 방식을 뜻하는 것 같은데, C++에서는 condition_variable와 같은 것으로 CPU를 무의미하게 점유하는 것을 막았던 것으로 기억납니다. lock이나 condition_variable을 사용하지 않고 이런 방식을 사용하는 이유가 있는지 알 수 있을까요.
답변 1
0
C# lock = C++ mutex 이고요 (표준에서 제공하는 락)
C# using (...) = C++ unique_lock(...) or lock_guard(...) 로 생각할 수 있습니다.
구글에서 C# object, lock 원리에 대해 검색해보시기 바랍니다.
CV는 당연히 C#에도 존재합니다. CV까지 가지 않고 스핀락을 사용하는게 유용한 경우는
정말 정말 락 거는 시간이 짧을 것으로 예상될 때입니다. (단순한 매니저 get set 이라거나)
그러면 오히려 이벤트 방식이나 CV와 같이 한 단계 거치는 방식보단 더 효율적일 수도 있겠죠.