c++ 11 멀티스레드 레코드 1 - std::thread

1219 단어
스레드 시작
말을 많이 하지 않고 바로 코드에 올리다
void func();
int main()
{
    std::thread t(func); //          
    t.join(); //     join  detach
    return 0;
}
void func()
{
    std::cout << "Hello, " << std::this_thread::get_id() << std::endl;
}

하위 스레드 종료 대기
때때로 하위 라인을 열면 부모 라인이 빨리 운행이 끝납니다.만약 부모 라인이 자신의 일을 끝낸 후에 하위 라인이 실행되고 끝날 때까지 기다리고 싶다면
    ......
    std::thread t(func);
    t.join();
    ......

서브스레드 분리
하위 라인은 완성해야 할 일이 많습니다. 부모 라인은 그것을 기다리고 싶지 않습니다. 이때detach를 사용할 수 있습니다.
    ......
    std::thread t(func);
    t.detach();

서브스레드가 분리된 후 백엔드 스레드와 맞먹는다. 이때 서브스레드 자원 회수를 책임지는 것은 c++ 실행 라이브러리이지 부 스레드가 아니다.
주의점
라인이 실행될 때 사용하는 자원이 미리 방출되지 않도록 확보해야 한다
위의 작은 예에서main 루틴은 t 루틴을 만들고 t.detach () 를 호출합니다.만약 t라인에서main라인의 일부 자원을 사용했다면 (resources라고 기록함) 주의를 끌 필요가 있습니다.만약main 라인이 적게 작동한다면;t라인은 작업이 무겁고 운행시간이 오래 걸린다.main 라인이 끝났을 때, Resources는 방출됩니다. 그러나 이 때 t 라인에서 이 Resources를 사용해야 합니다.이것이 문제입니다. #### 스레드가 실행될 때 사용하는 자원이 미리 방출되지 않도록 해야 합니다.
detach와join 둘 다 한 번만 쓸 수 있어요.
detach를 호출한 후에 Join을 호출할 수 없습니다.join을 사용한 다음에 detach를 사용할 수도 없어요. (테스트할 때 detach를 사용한 다음에 Join을 사용한 다음에 죽었어요. 한참 걸렸어요.)

좋은 웹페이지 즐겨찾기