packaged_task 예제

약속은 스레드 간에 값을 공유하는 방법을 한 단계 더 제어할 수 있는 수준을 제공합니다. 비동기 및 packaged_task 모두에 대해 실행중인 함수의 반환 된 값은 미래에서 얻은 값이었습니다. 약속은 우리가 필요로 할 때언제어디서나 약속의 가치를 세울 수 있는 자유를 줍니다. 약속을 사용하여 동일한 예제를 볼 수 있습니다: 이전 문서의 예제에서 패키지된 작업을 사용 합니다. 약속과 다른 동기화 메커니즘의 차이점은 약속 함수 호출의 끝과 다른 시간에 값을 통신할 수 있다는 것입니다. 이 차이를 예제와 함께 설명했습니다. 이것은 패키지된 작업의 가능한 사용이지만 일반적인 것은 아닙니다. std::비동기를 사용하는 것은 이 경우 훨씬 쉽습니다. 그러나 익숙한 예제를 사용하여 패키지된 작업을 탐색하는 것이 유용합니다. 실제로 방금 제공한 예제는 Futures와 같이 다소 긴 함수를 사용하는 경우 동시 프로그래밍의 개념입니다. 미래는 비동기 작업의 결과에 액세스하는 방법입니다. 간단한 예: 위의 예에서 std::async를 사용하여 미래를 얻습니다.

결과가 필요할 때, 우리는 미래에 get()을 호출하고 그것을 사용합니다. 다음 기사에서는 패키지된 작업의 사용에 대한 또 다른 예제를 제공합니다. std::async에서처럼 작업의 실행과 패키지된 작업에서 미래의 검색이 너무 밀접하게 연결되지 않는다는 사실을 활용합니다. std::p로이마인경우는 이러한 제한이 없습니다. 약속은 함수 호출이 끝날 때뿐만 아니라 언제든지 미래에 값을 명시적으로 설정할 수 있습니다. 이러한 동작의 예를 살펴보겠습니다. 함수에 인수를 전달하고 실행하는 패키지된 작업의 실행은 함수의 반환 값을 나중에 설정합니다. 따라서 다시 std::packaged_task 함수 호출의 끝에 값을 전달 합니다. 예를 들어 packaged_task는 함수 실행을 좀 더 제어할 수 있습니다. 예제를 살펴보겠습니다: 이 예제에서는 약속과 다른 동기화 메커니즘 간의 차이점을 보여 줍니다. 약속은 기능 의 중간에 엔진의 상태를 전달하고 끝이 아닙니다.

위의 예제는 비동기 예제와 동일하지만 몇 단계 더 수행됩니다. 이 기능은 작업을 실행할 스레드를 정확히 지정해야 하는 경우에 주로 유용합니다. 이러한 자유가 필요하지 않은 경우 단순성을 위해 비동기를 사용할 수 있습니다. std::async는 함수를 인수로 받아 미래를 반환합니다. Future에는 함수의 반환 형식과 동일한 템플릿 매개 변수가 있습니다. 함수가 반환되면 반환 값은 미래를 설정합니다. 따라서 std::async 함수 호출의 끝에 값을 통신 합니다. 예를 들어 위의 예제는 packaged_task의 예제와 매우 유사합니다. 차이점은 함수의 반환 값에서 설정 되는 미래의 값 대신 함수가 특히 값을 설정 한다는 것입니다. 패키지된 작업에는 미래를 반환하는 멤버 함수 .get_future()가 있습니다.