Tuesday, June 9, 2009

boost::thread - mutex, condition, barrier.

어플리케이션을 여러 플랫폼에서 쓰이도록 만들고 있을 때 Thread를 써야 하는 상황이라면,
It is supposed to need to use a thread when you are developing a portable application,

ifdef 를 남발하거나, 자기만의 wrapper 클래스를 만들어 그안에서 ifdef 를 남발해야 하지만
You may use 'ifdef' macros, or you may use 'ifdef' macros internally in your own thread wrapper class.

boost::thread library 를 사용한다면 보다 간결하게 할 수 있음.
But, you can make it simple if you use the 'boost::thread' library.

(물론, boost::thread 가 겁나 좋다! 이걸 쓰자! 이런 얘기가 아님. -0-; 하나의 후보일 뿐.)
(Of course, I don't want to say that the 'boost::thread' library is pretty good, so you should use it!. No. It is just one of the candidates.)

boost::thread


thread 하면 빠질 수 없는 것이 동기화.
A synchronization is necessary in a threading.

boost::thread 가 지원하는 동기화 객체는 크게보면 세가지.
There are three important synchronization objects which we normaly use for the 'boost::thread'.

mutex, condition, barrier.

쓰이는 방법이 전통적인 pthread 형태를 닮았다.
The usuages of them are similary to a traditional way of the 'pthread'.

간단한 예제 (한글) :http://meat.tistory.com/186
A simple example. (in Korean)



헌데, boost 의 FAQ 에서도 확인할 수 있듯이, 동기화 지원이 상대적으로 빈약하기 그지없다.
By the way, as you can notice it in the FAQ of the 'boost', it's rather weak in a synchronization.

그 이유야 전체 플랫폼을 커버해야 하다보니 뭔가 부족한 부분이 있고,
The reason is that the 'boost' should support several platforms so that it might not much enough than the specific OS.

각 OS 에 특화된 최신 동기화 기술들을 쓸 수가 없다.
Also, it can't use the latest and specialized tech in each OS specific.

그러므로 고성능 어플리케이션을 제작할 때에는 사용을 다시한번 고려해볼 필요가 있다.
Therefore, you need to consider it again if you are developing a high-end application.

1 comment:

  1. TBB는 어때?

    http://www.threadingbuildingblocks.org/

    상용버전도 있지만 open source 버전도 쓸만하다는데.

    인텔이 만든거니.. 뭐. 성능이나 안정성은 죽이겠지.

    ReplyDelete