비동기: boost async & boost future

3234 단어 c/c++
비동기 (예 를 들 어 io 대기, 대량 계산) 실행 코드 가 필요 하 다 면 boost async 와 future 는 편리 한 조작 을 제공 합 니 다.
보충, 여기 보기:http://blog.csdn.net/gw569453350game/article/details/50435879
#include 
using namespace boost;
int main()
{
  future<int> f1 = async([]() { return 123; });  // or any heavy computation
  future<string> f2 = f1.then([](future<int> f) { return f.get().to_string(); // here .get() won't block;
}

위의 코드 는 f1 변 수 를 저장 해 야 합 니 다. 그렇지 않 으 면 async 임시 future 변 수 를 되 돌려 주 고 삭 제 됩 니 다. 이 future 의 삭 제 는 메 인 프로그램 이 비동기 로 실 행 된 함수 의 반환 (즉 차단) 을 기다 리 게 할 것 입 니 다.따라서 async 가 실행 하 는 함수 의 반환 값 을 사용 하지 않 아 도 f1 로 되 돌아 오 는 future 변 수 를 저장 해 야 합 니 다. 그렇지 않 으 면 비동기 실행 을 막 을 수 있 습 니 다 (즉, async 는 계산 이 끝 난 후에 만 돌아 올 수 있 습 니 다). 예 를 들 어:
void f()
{
  std::future fut = std::async(std::launch::async, 
                                     [] { /* compute, compute, compute */ });

}                                    // block here until thread spawned by std::async completes

The function blocks until the asychronously running thread completes.
왜냐하면:
The thread completion [for the function run asynchronously] synchronizes with [i.e., occurs before] [1] the return from the first function that successfully detects the ready status of the shared state or [2] with the return from the last function that releases the shared state, whichever happens first.
그러나 async 를 사용 하지 않 으 면 차단 되 지 않 습 니 다.
void f3()
{
  std::packaged_task pt(doSomeWork);
  auto fut = pt.get_future();
  std::thread(std::move(pt)).detach();
  ...                          // no get, no wait
}
Now what happens?

Your function returns, even if the function to be run asynchronously is still running.

주의: boost:: future 는 한 번 만 얻 을 수 있 습 니 다. 두 번 째 get 은 비어 있 습 니 다!
링크 참조 1.http://www.boost.org/doc/libs/1_59_0/doc/html/thread/synchronization.html#thread.synchronization.futures 2. http://scottmeyers.blogspot.hk/2013/03/stdfutures-from-stdasync-arent-special.html 3. http://scottmeyers.blogspot.hk/2013/03/thread-handle-destruction-and.html 4. http://www.boost.org/doc/libs/1_59_0/doc/html/thread/build.html#thread.build.configuration.future

좋은 웹페이지 즐겨찾기