/////////////////////////////////////////////////////////////////////// // MT3Q7.cpp - Thread results // // // // Jim Fawcett, CSE687 - Object Oriented Design Midterm, Spring 2018 // /////////////////////////////////////////////////////////////////////// #include #include #include #include size_t theFirstMeaningOfLife() { std::cout << "\n The meaning of life: "; for (size_t i = 0; i < 5; ++i) { std::this_thread::sleep_for(std::chrono::milliseconds(500)); std::cout << "thinking ... "; } return 42; } void theSecondMeaningOfLife(size_t& answer) { std::cout << "\n The meaning of life: "; for (size_t i = 0; i < 5; ++i) { std::this_thread::sleep_for(std::chrono::milliseconds(300)); std::cout << "thinking ... "; } answer = 42; } int main() { std::cout << "\n MT3Q7 - Getting a std::thread result"; std::cout << "\n ======================================\n"; // async with future is thread safe by design std::future fut = std::async(theFirstMeaningOfLife); std::cout << "\n the first meaning of life is: " << fut.get(); std::cout << "\n"; // for thread safety, must join before accessing ref value size_t mol; std::thread t(theSecondMeaningOfLife, std::ref(mol)); t.join(); std::cout << "\n the second meaning of life is: " << mol; // prefer the first method std::cout << "\n\n"; return 0; }