좋아, 나는 this deleted question과 같은 것을 요구하고있다. 그러나 나는 그것을 더 직접적으로 묻고있다.Windows에서 원자 적으로 두 개의 포인터를 어떻게 바꿀 수 있습니까?
동일한 클래스의 두 인스턴스에서 두 개의 포인터 변수가 있습니다. 나는 그 변수의 내용을 바꾸고 싶다. (POINT가 아니라 변수 그 자체) 원자 적으로 바꾸고 싶다.
가능하면 잠금을 피하고 싶습니다.
어떻게하면됩니까?
EDIT : 세 개의 "InterlockedExchangePointer"답변에 먼저 MSDN docs을 읽어주십시오. InterlockedExchangePointer는 스택 레지스터의 값을 가진 포인터 대상 값을 교환합니다. 그것은 (그 자체로) 메모리 위치에서 두 개의 포인터를 교환하지 않습니다.
두 개의 메모리 주소 내용을 바꾸는 비 잠금 X86 명령이 있다고 생각하지 않습니다. CPU를 지원하지 않으면 이러한 기능을 구현하기 어려울 것입니다. 포인터에 대한 보증이 있습니까? (예 : 항상 메모리에 인접 해 있습니까? 그렇다면 루프에서 8 바이트 또는 16 바이트 비교/교환을 사용할 수 있습니다.) –
@James : 모든 사람의 의견에 똑같은 내용을 올린 후 : 'int * p1 = somevalue; int * p2 = someothervalue; p2 = InterlockedExchangePointer (p1, p2);'그냥 그렇게 할 것입니다. 그 밑에는 중요한 섹션이 있으므로 잠금을 완전히 피할 필요가 있는지 잘 모르겠습니다. –
와우, 많은 사람들이 잘못된 대답을하고 있습니다 ...이것은 인터뷰 질문 ':-)이되어야합니다. – rubenvb