Tôi đã viết mã sau để kiểm tra std::async()
về các chức năng trả về void
với GCC 4.8.2 trên Ubuntu.Là std :: async đảm bảo được gọi cho các hàm trả về void?
#include <future>
#include <iostream>
void functionTBC()
{
std::cerr << "Print here\n";
}
int main(void)
{
#ifdef USE_ASYNC
auto i = std::async(std::launch::async, functionTBC);
#else
auto i = std::async(std::launch::deferred, functionTBC);
#endif
//i.get();
return 0;
}
Nếu i.get();
không được chú ý, thông báo "Print here"
luôn tồn tại; tuy nhiên, nếu i.get();
được nhận xét, "Print here"
sẽ tồn tại nếu và chỉ khi USE_ASYNC
được xác định (nghĩa là, std::launch::async
luôn dẫn đến thông báo được in ra trong khi std::launch::deferred
không bao giờ).
Hành vi được đảm bảo này? Cách chính xác để đảm bảo cuộc gọi không đồng bộ trở về void
sẽ được thực thi là gì?
Nếu bạn yêu cầu khởi chạy hoãn lại và không bao giờ gọi. Hãy quên đi tương lai đó, chức năng của bạn sẽ không bao giờ được thực hiện. Điều này không liên quan gì đến hàm trả về void hoặc bất kỳ kiểu nào khác. – sbabbi