Atomically compares the object representation (until C++20)value representation (since C++20) of the object pointed to by obj with that of the object pointed to by expected, and if those are bitwise-equal, replaces the former with desired (performs read-modify-write operation). Otherwise, loads the actual value pointed to by obj into *expected (performs load operation). Copying is performed as if by std::memcpy.
이 함수 작동이 obj가 가리키는 것과 expected가 가리키는 것이 동일해야하고 (헤드 스마트 포인터 == 삽입한 새 노드의 next 스마트 포인터여야 함, 다른 스레드에서 다시 헤드를 이동시켰을 수도 있어서)
만약 동일하다면 desired를 obj쪽에 복사하고 (헤드 포인터가 새 노드를 가리키게 함)
동일하지 않다면 expected쪽을 업데이트해서 obj가 가리키는 것과 동일한 것을 가리키게 한다 (남이 헤드를 이동시켜놨다면 새 노드의 넥스트 포인터도 똑같이 옮겨준다) -> 이후 재시도 위해 루프 필요
내가 이해한게 맞음???
구린 디자인이라던데 함수 자체가 헷갈려서 질문함
이해한게 대강 맞는데 가리키는게 동일해야된다는건 C++20 이전까지고 C++20 부터는 "값"만 같으면 된다는 뜻 - return 0;
흐미 시불...