c++ 11 멀티스레드 레코드 1 - std::thread
말을 많이 하지 않고 바로 코드에 올리다
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을 사용한 다음에 죽었어요. 한참 걸렸어요.)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.