6.5. 练习
You can buy solutions to all exercises in this book as a ZIP file.
- 重构下面的程序用两个线程来计算总和。由于现在许多处理器有两个内核,应利用线程减少执行时间。
- #include <boost/date_time/posix_time/posix_time.hpp>
- #include <boost/cstdint.hpp>
- #include <iostream>
- int main()
- {
- boost::posix_time::ptime start = boost::posix_time::microsec_clock::local_time();
- boost::uint64_t sum = 0;
- for (int i = 0; i < 1000000000; ++i)
- sum += i;
- boost::posix_time::ptime end = boost::posix_time::microsec_clock::local_time();
- std::cout << end - start << std::endl;
- std::cout << sum << std::endl;
- }
- 下载源代码
- 通过利用处理器尽可能同时执行多的线程,把例1一般化。 例如,如果处理器有四个内核,就应该利用四个线程。
- 修改下面的程序,在
main()
中自己的线程中执行thread()
。 程序应该能够计算总和,然后把结果输入到标准输出两次。 但可以更改calculate()
,print()
和thread()
的实现,每个函数的接口仍需保持一致。 也就是说每个函数应该仍然没有任何参数,也不需要返回一个值。
- #include <iostream>
- int sum = 0;
- void calculate()
- {
- for (int i = 0; i < 1000; ++i)
- sum += i;
- }
- void print()
- {
- std::cout << sum << std::endl;
- }
- void thread()
- {
- calculate();
- print();
- }
- int main()
- {
- thread();
- }