참고 : http://stackoverflow.com/questions/10915233/stdthreadjoin-hangs-if-called-after-main-exits-when-using-vs2012-rc

std::thread 객체를 Windows에서 static으로 사용하는 경우.
join을 호출하면 내부 API가 락을 시도하는데, 프로세스 종료 시점에서 join을 시도하면,

  1. main() 이 반환된다.
  2. 메인스레드가 종료를 위해 프로세스 내부적으로 사용되는 특정한 lock을 건다.
  3. 전역 객체들에 대해 소멸자를 호출하는데 소멸자가 std::thread::join을 호출한다면,
  4. child 스레드가 자신의 종료를 위해 프로세스에 lock을 시도하는데 이미 메인스레드가 lock을 잡고있다.
  5. DEADLOCK.

스택오버플로의 게시물에 의하면 Windows에서만 발생하는 문제인 것 같다.