rein's world

C++ 0x 위에 트랜잭션 구문 만들기

DDJ에 흥미로운 기사가 실렸다. Intel, IBM, Sun 등이 모여서 C++ 0x 스펙 위에 Transaction 을 가능케 해주는 C++ 구문과 attribute들을 추가하는 것에 관해서 논의 하고 있다고 한다.

일단 간단히 훑어본 바로는,

  • transaction 키워드가 추가된다. 여기에는 atomic 혹은 relaxed attribute이 붙을 수 있다. 그리고 해당 구문은 원자적으로 실행하게 해주는 메커니즘을 제공하고, transaction_cancel 명령으로 중간에 이를 취소할 수도 있다
  • 어떤 C++ statement, compound statment, function은 transaction_safe 혹은 transaction_unsafe attribute이 지정될 수 있으며, 이는 컴파일러가 자동적으로 추론할 수도 있다
  • 또한 트랜잭션의 nesting을 제어하는 구문이 추가된다

정도이다.

즉, 컴파일러에게 몇 가지 암시를 주고(혹은 추론하게 하고) 이를 바탕으로 transactional memory처럼, 지정된 단위의 실행이, 다른 무언가랑 겹치지 않게 보장해줌으로써 즉, 복수의 스레드가 해당 영역을 동시에 실행해도, 한 쪽의 변화가 다른 쪽에게 보이지 않게 해주는 것 요즈음의 멀티스레드 프로그램을 작성하는 프로그래머가 겪을 어려움을 줄여보겠다는 것.

물론 이런 문법적인 기능을 실제로 각 플랫폼 위에 구현하는게 쉬운 일은 아닐꺼고, 저 드래프트에서도 각 구문들이 MSVC에선 어떻고 GCC에선 어떻고하는 차이들까지 써놓고 있다. 하지만 이게 정말 구현되서 – 물론 그 전에 C++ 0x 부터 완전히 구현되서 올라가야 하겠지만 – 실제로 프로그래머에게 도구로 제공된다면 꽤나 편해지긴 하겠다.