링크 : http://tingcobell.tistory.com/295
이식성, 유연성에을 고려하여 최대한 효율적으로 구현된 라이브러리입니다. 날짜/시간과 같은 테스크을 조정하고
파일 시스템 인터페이스, 네트워킹, 원자적 프로그래밍 등 상호간의 조율을 합니다.
메뉴얼을 읽고 있는데 boost로 구현한 thread을 처음 사용하는 것이라서 요목조목 구현 및 테스트를 해보려고
합니다.
스레드에 간단한 다이어그램을 그린다면 다음과 같이 구성이 될것 입니다. 기본 모델
1. boost::thread을 선언( 다시말하면 스래드 선언? 이정도로 봐야 정확합니다. )
2. boost::join을 통하여 실제로 동작이 됩니다.
3. 빨간색은 worker 스레드가 동작하는 것을 말합니다.
4. 그러는 동안 노랑색은 sleeping에 빠지게 되죠.
5. 동작이 끝나면 sleeping 에서 깨어나서 동작을 하게 됩니다.
만일에 무한으로 worker 스레드가 동작을 하게 되면 어떠한 single이 오기전까지는 이 프로그램은 종료
되지 않습니다.
간단한 예을 가지고 기본적인 구성과 동작에 대해서 설명을 드리겠습니다.
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
void workerFunc()
{
boost::posix_time::seconds workTime(3);
std::cout << "Worker: running" << std::endl;
// Pretend to do something useful...
boost::this_thread::sleep(workTime);
std::cout << "Worker: finished" << std::endl;
}
int main(int argc, char* argv[])
{
std::cout << "main: startup" << std::endl;
boost::thread workerThread(workerFunc);
std::cout << "main: waiting for thread\n";
workerThread.join();
std::cout << "main: done" << std::endl;
return 0;
}
main 에서 스레드를 객체를 선언합니다. 그런 후에 join을 통해서 동작하게 되는 원리를 가지고 있습니다. 만일에
join 동작을 하지 않을 경우에는 그냥 main 프로세스만 처리하고 종료되가 됩니다.
Reference 을 보고 있으니깐 참고할 사항이 좀 있습니다.
Default Constructor
thread();
Move Constructor
thread(detail::thread_move_t<thread> other);
Move assignment operator
template<typename Callable>
thread(Callable func);
Thread Constructor with arguments
template <class F,class A1,class A2,...>
thread(F f,A1 a1,A2 a2,...);
Thread Destructor
~thread();
Member function joinable()
bool joinable() const;
Member function join()
void join();
'프로그램언어 > boost' 카테고리의 다른 글
[ Boost ] Boost::thread #3 (1) | 2011.05.11 |
---|---|
[ Boost ] Boost::thread #2 (0) | 2011.05.11 |
[ Boost ] Boost.array 관련 예제 만들어보기 (0) | 2011.05.03 |
[ Boost ] Boost.Array Description (0) | 2011.05.03 |
[ Boost ] Ref. array.hpp (4) | 2011.05.02 |