Boost.Fiber when_any, simple completion


when_any, simple completion - 간단한 완성

가장 간단한 경우는 일련의 비동기 작업 중 첫 번째 작업이 완료되었다는 사실만 알면 되는 경우입니다.
— 그러나 반환 값을 얻을 필요는 없으며 예외가 발생하지 않을 것이라고 확신합니다.

이를 위해 condition_variable 및 뮤텍스로 bool 변수를 래핑하는 Done 클래스를 도입합니다. 이 섹션 전체에서 우리가 따르는 패턴은 std::shared_ptr<>를 다양한 작업의 파이버 기능에 대한 관련 동기화 개체에 전달하는 것입니다.   이렇게 하면 마지막 파이버와 관련된 동기화 개체의 수명(lifespan)에 대한 잔소리(nagging)가 사라집니다.

wait_first_simple()은 완료에 대해 해당 전략을 사용합니다. wait_first_simple_impl()은 인수 팩에 대한 일반적인 재귀로, 각각의 새 파이버에 대해 'Done::ptr'을 캡처합니다. Fiber의 람다 본문은 약속한 대로 매우 간단합니다. 함수를 호출하고 반환되면 완료를 알립니다.
이를 수행하는 첫 번째 파이버는 wait_first_simple()이 반환되도록 허용합니다.
— 이것이 바로 wait_first_simple()에서 스택 변수로 선언하는 대신 std::shared_ptr이 Done 객체의 수명을 관리하도록 하는 것이 유용한 이유입니다.

이렇게 호출할 수 있습니다. 이 예에서는 sleeper("wfs_short", 50)가 완료되면 wait_first_simple() 이후 제어가 다시 시작됩니다.
— 다른 두 개의 sleeper() 파이버가 여전히 실행 중인데도 마찬가지입니다.

⚛ 원문
Email 답글이 올라오면 이메일로 알려드리겠습니다.