get_id() 함수는 thread 객체에 연결된 스레드의 식별자 id를 반환합니다. get_id()를 사용하면 멀티스레드에서 공용 리소스에 접근하는 스레드가 어떤 것인지 알 수 있습니다.

 

swap() 함수는 thread 객체간의 스레드를 서로 교환할 때 사용합니다. STL 컨테이너에 있는 swap과 같은 역할을 한다고 보면 됩니다.

 

get_id() swap()이 어떤 것인지는 아래 예제 코드를 보시면 이해가 쉬울 것 같습니다.

 

< 예제. 4 >

#include <thread>

#include <iostream>

#include <mutex>

 

int main()

{

           // 동기화 객체. 다음에 자세히 설명하겠습니다.

std::mutex mtx_lock;

 

           int nThreadRunCount1 = 0;

           std::thread Thread1;

           Thread1 = std::thread( [&] ()

                       {

                        for( int i = 0; i < 5; ++i )

                        {

                                   ++nThreadRunCount1;

                                                                                                                                                                           

                                   mtx_lock.lock();

                                   std::cout << "Thread1 ID : " << Thread1.get_id() << std::endl;

                                   mtx_lock.unlock();

                        }

                     } );

          

           int nThreadRunCount2 = 0;

           std::thread Thread2;

           Thread2 = std::thread( [&] ()

                       {

                        for( int i = 0; i < 5; ++i )

                        {

                                   ++nThreadRunCount2;

                                                                                                 

                                   mtx_lock.lock();

                                   std::cout << "Thread2 ID : " << Thread2.get_id() << std::endl;

                                   mtx_lock.unlock();

                       }

                      } );

          

           // Thread1 Thread2가 스레드 ID를 제대로 할당 받은 후 swap하기 위해서 일시 대기

           while( nThreadRunCount1 < 3 && nThreadRunCount2 < 3 )

           {

           }

 

           mtx_lock.lock();

           std::cout << "swap 1,2" << std::endl;

           mtx_lock.unlock();

 

           Thread1.swap( Thread2 );

          

           Thread1.join();

           Thread2.join();

 

           return 0;

}

 

< 결과 >

 


위의 결과를 보면 각 thread 객체마다 스레드 id를 할당 받은 것을 알 수 있습니다. 그리고 swap을 하면 swap 하기 전에 비해서 Thread1 Thread2의 스레드 id가 서로 바뀐 것을 알 수 있습니다.

 

저작자 표시
신고
by 흥배 2013.04.15 08:00

티스토리 툴바