-
스레드 함수를 람다식 안에서 사용할 때 주의할 점개발/C·C++ 2021. 9. 15. 01:08
void ThreadManager::launch(function<void(void)> callback) { _threads.push_back(thread([&]() { callback(); })); }
위의 코드에는 문제점이 있습니다. 각 스레드가 실행되면서 callback()을 호출하다가 오류가 발생합니다. 사실 굉장히 간단한 문제인데요. launch 함수의 인자인 callback은 지역 변수입니다. launch()가 종료되면 사라지는 것이지요. 하지만 스레드는 계속 작동해야 합니다. 이런 상황에서 스레드 함수를 지역 변수(함수 포인터)의 참조로 받았기 때문에 launch()가 반환되면서 dangling이 일어나기 때문에 오류가 발생합니다.
'개발 > C·C++' 카테고리의 다른 글
union (0) 2021.09.24 스마트 포인터 (0) 2021.09.19 split() (0) 2021.09.11 생산자/소비자 패턴에서의 WaitForSingleObject() (0) 2021.09.01 sleep_for(), yield() (0) 2021.09.01