AI 시뮬레이션 쓰레드 보면
// 시뮬레이션 스레드: Step() 도중
auto* node = m_Blocks.back().get() + m_Current++; // 비원자적 증가
std::construct_at(node, nw, ne, sw, se);
canonMap.try_emplace(key, node); // 삽입 → rehash 유발 가능
// 에디터 스레드: 같은 인덱스 캐시로 copy/paste
canonMap.find(otherKey); // rehash 진행 중이면 → UB
요렇게 짜는데,
m_current++가 비원자 증가고, open-addressing 맵의 삽입중에 rehash가 동시 read 되니까 결국 UB가 됨
기계인데 기계적 감수성을 이해 못해서 데이터 레이스가 나오는데, 기본적으로 쓰레드 풀 로 워커 재사용한 후에 고유 ID로 캐시를 고른 후에 원자성을 보장하게 캐싱을 해야하는데
AI가 짜면 그냥 지금 돌아가는 코드만 짜는데 아직도 인간이 피룡없다 하는 이유를 모르겠음
성능이고 나발이고 관심없데.