제 생각은 바로 delete old_Head 하면 큰일난다고 생각합니다. TryDelete안에서 다른 것들도 지우려고 해서 코드가 길어진 것이라서 본질적인 것만 보면 결국 현재 m_popCount가 1인지를 먼저 체크를 하고 시도합니다. 이 의미가 중요한 것은 말그대로 해당 변수를 현재의 스레드만 참조 하고있다는 의미이고, 이전 CAS 실행이 끝났을때도 다른 쓰레드가 참조하지 않았다는 것을 보장해주는 개념입니다. 체크하지 않았다면 CAS에서 어떤 스레드가 참조하고있을지 알 방법이 없겠죠? 그럼 댕글링 포인터가 발생할 가능성이 존재해져버립니다. 그래서 제 생각엔 반드시 혼자 스레드를 사용하는지 체크해라! 가 포인트인 것 같습니다. 그과정에서, 만약 혼자 사용하던게 아니라면(참조되고있다면) 예약시스템이 추가되는 것이구요