• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

원자성 관련 궁금함이 있어 질문드립니다

21.03.12 11:58 작성 조회수 124

0

경합 조건 때문에 원자성을 보장해야 한다고 하셔서 

if (_lock == 0)

     _lock = 1;

위와 같은 코드를 Intetlocked.CompareExchange나 Interlocked.Exchange를 이용해서 한번에 실행하게 하여

원자성을 보장해야한다고 하셨는데 그중에 궁금한점이

2줄, 3줄에 걸쳐서 실행이 되나 모든 과정이 한번에 실행이 되나 경합 조건에 의해서 아주 미세한차이로 같이 접근을 하게 되면

한번에 실행되는것도 동시에 여러번 실행될수도 있을 것 같다는 생각이 드는데

Lock을 걸면 어떤 경우에도 싱글쓰레드처럼 한번만 실행되는것이 보장되는건가요?

답변 1

답변을 작성해보세요.

0

네 맞습니다.
그건 CPU 차원에서 보장을 해주는데
메모리 락이라고 해서 사실상 한 번에
한 쓰레드만 접근해서 메모리 조작을 할 수 있게 막아버립니다.
물론 그만큼 속도도 느립니다.