글
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가 서로 바뀐 것을 알 수 있습니다.
RECENT COMMENT