• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

마지막 20:00 ref 질문

22.02.09 17:02 작성 조회수 104

0

지금 좀 이해가 되는 부분은

멀티 쓰레드 이기때문에

prev에서 값을 가져올려고 하는 순간

1. 다른 쓰레드가 number의 값을 변경 할 수도 있기 때문에 말이 안된다 == 다른 쓰레드가 number의 값에 접근을해서 number의 값이 바뀐 상태일 수도 있기 때문에 유효한지 안한지 모르기때문에 number를 막바로 추출하는것은 말이안된다. 맞나용...??

 

 

2. ref레퍼런스로 참조를 해서 Increment인자에 넣어서 원자 성이 보장되는 것이 아니라

InterLocked계열의 함수를 사용했기때문에, Increment안에 레퍼런스 number를 넣어 주었을때 원자성이 보장되어 값이 "확정" 되는 것인가요?

3. InterLocked 계열에서 ref를 쓰면 가시성 보장 + 순서를 보장해주고 InterLocked 계열의 함수가_number의 진짜 값(진짜 주소)에 접근을 하는 것을 막아 주어서 다른 쓰레드가 접근을 못하는 것인가요? (말그대로 Increment 인자에 들어온 변수의 주소를 지금 내가 Locked 했다는 의미 인가요??)

답변 1

답변을 작성해보세요.

0

1. 네
2. 질문이 좀 애매한데요. 어차피 Interlocked 계열이 ref를 받으니 그게 그거입니다.
3. 그렇다기 보다는 CPU instruction 중에서 lock 계열의 특수한 명령어들이 있습니다.
함수 차원에서 뭔가를 해주는 것이 아니라, CPU에서 지원하는 CAS 연산인 것이죠.
내부 작동 원리는 메모리 버스까지 개입 하기에 우리가 이해해야 하는 부분은 아니고
정말 궁금하시면 구글에서 연구해보시기 바랍니다.

starkshn님의 프로필

starkshn

질문자

2022.02.11

네 답변 정말 감사합니다!