C++ 작업 초안 [saferecl.rcu] · 지원 상태 확인 2026-10-30

C++ RCU: 읽기 보호와 객체 회수의 계약

RCU protection region, retire, synchronize, barrier의 역할은 서로 다릅니다.

읽기 보호는 mutex가 아닙니다

RCU는 읽기가 많고 수정이 드문 자료에서 객체 회수를 늦추는 방법입니다. C++ 초안의 rcu_domain::lock()/unlock()은 보호 구간을 열고 닫습니다. std::scoped_lock으로 구간을 표현할 수 있지만 상호 배제나 최신 값 관찰을 보장하는 mutex와는 다릅니다. 작성자 간 동기화와 새 포인터의 올바른 게시는 별도로 설계해야 합니다.

자체 개념도: 논리적 제거와 메모리 해제 분리
  1. 새 독자가 옛 객체를 얻지 않도록 게시 경로 변경

  2. 옛 객체를 쓰는 보호 구간 종료 대기

  3. 예약된 deleter 평가 → 메모리 회수

synchronize와 barrier는 서로 대신할 수 없습니다

rcu_synchronize(dom)은 해당 규칙에 걸리는 보호 구간이 끝날 때까지 기다립니다. rcu_barrier(dom)은 호출보다 앞서 일어난 예약에 해당하는 평가가 완료될 때까지 기다립니다. 하나가 다른 하나를 암묵적으로 호출한다는 보장은 없습니다. 보호 구간 종료와 deleter 완료를 같은 사건으로 세면 안 됩니다.

deleter 실행 시점과 예외

retire는 평가를 예약하지만 호출 중 이미 예약된 평가를 실행할 수도 있습니다. deleter가 필요로 하는 자원을 잡은 채 retire 또는 unlock을 호출하면 교착할 수 있습니다. 자유 함수 rcu_retire는 메모리를 할당하고 예외를 던질 수 있으며, 예외로 끝나면 평가를 예약하지 않습니다. rcu_obj_base::retire 멤버의 noexcept 계약과 구분합니다. 예약된 deleter가 예외로 빠져나가는 동작은 허용되지 않습니다.

초안에 실렸다고 표준 라이브러리가 실제로 지원하는 것은 아닙니다

2026-10-30에 확인한 libc++ C++26 지원표에서 P2545R4의 완료·최초 배포 버전 칸은 비어 있습니다. 이 표만으로 모든 컴파일러가 지원하거나 모두 미지원이라고 단정하지 않습니다. 사용할 라이브러리 릴리스와 API 제공 여부를 확인해야 합니다. 이 글은 계약 설명이며 해당 API의 컴파일·실행·성능 시험을 수행하지 않았습니다.

참고 자료

C++ 작업 초안: RCU · libc++ C++26 지원표 · Linux RCU 객체 수명: 별도의 구현과 API