• 6.5. 练习

    6.5. 练习

    You can buy solutions to all exercises in this book as a ZIP file.

    • 重构下面的程序用两个线程来计算总和。由于现在许多处理器有两个内核,应利用线程减少执行时间。
    1. #include <boost/date_time/posix_time/posix_time.hpp>
    2. #include <boost/cstdint.hpp>
    3. #include <iostream>
    4.  
    5. int main()
    6. {
    7. boost::posix_time::ptime start = boost::posix_time::microsec_clock::local_time();
    8.  
    9. boost::uint64_t sum = 0;
    10. for (int i = 0; i < 1000000000; ++i)
    11. sum += i;
    12.  
    13. boost::posix_time::ptime end = boost::posix_time::microsec_clock::local_time();
    14. std::cout << end - start << std::endl;
    15.  
    16. std::cout << sum << std::endl;
    17. }
    • 下载源代码
      • 通过利用处理器尽可能同时执行多的线程,把例1一般化。 例如,如果处理器有四个内核,就应该利用四个线程。
    • 修改下面的程序,在 main()中自己的线程中执行 thread() 。 程序应该能够计算总和,然后把结果输入到标准输出两次。 但可以更改 calculate()print()thread() 的实现,每个函数的接口仍需保持一致。 也就是说每个函数应该仍然没有任何参数,也不需要返回一个值。
    1. #include <iostream>
    2.  
    3. int sum = 0;
    4.  
    5. void calculate()
    6. {
    7. for (int i = 0; i < 1000; ++i)
    8. sum += i;
    9. }
    10.  
    11. void print()
    12. {
    13. std::cout << sum << std::endl;
    14. }
    15.  
    16. void thread()
    17. {
    18. calculate();
    19. print();
    20. }
    21.  
    22. int main()
    23. {
    24. thread();
    25. }
    • 下载源代码