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처럼, 지정된 단위의 실행이, 다른 무언가랑 겹치지 않게 보장해줌으로써[1] 요즈음의 멀티스레드 프로그램을 작성하는 프로그래머가 겪을 어려움을 줄여보겠다는 것.

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

  1. 즉, 복수의 스레드가 해당 영역을 동시에 실행해도, 한 쪽의 변화가 다른 쪽에게 보이지 않게 해주는 것 []

Author: rein

나는 ...

5 thoughts on “C++ 0x 위에 트랜잭션 구문 만들기”

  1. 인텔이 참여한다는 점에서 상당한 파급력이 있을 것 같네요. x86계열에서는 다 돌릴 수 있다는 의미이니… MS 정도까지 공식적이든 비공식적이든 추가로 지원해 준다면 트랜잭셔널 메모리가 차기 표준안에 반영될 가능성도 상당히 높겠네요. 락 없는 멀티쓰레드 세상이 한 걸음 더 다가온 느낌 ;

    1. intel, IBM, SUN이 있다는 얘기는 AMD를 제외한 주요 CPU 벤더가 거의 포함된다는 얘기지요 (물론 HP 같은 곳이나 ARM 같은 좀 더 다른 목적의 CPU들도 있지만요).

      그래서 제가 원하는(?) Hardware 지원이 있는 TM이 C++에서 ‘쉽게’ 구현될 수 있을 것 같아서 기대가 큽니다.
      (물론 TM이 모든 문제를 해결해줄 순 없지만요)

    1. TR1이 나온다고 세계가 바뀌지는 않지만 편해지긴 했지. 이건 분야가 한정적이긴 해도 파급력은 더 쎌듯(시간이 걸려서 문제지…)

  2. Pingback: rein's world

Leave a Reply