C++ 在发布版本中增强线程同步
当我尝试在VS2005中以调试和发布模式运行以下代码时。每次我在控制台中看到不同的输出时,多线程似乎并不是在发布模式下实现的C++ 在发布版本中增强线程同步,c++,multithreading,boost,C++,Multithreading,Boost,当我尝试在VS2005中以调试和发布模式运行以下代码时。每次我在控制台中看到不同的输出时,多线程似乎并不是在发布模式下实现的 1. #include <boost/thread.hpp> 2. #include <iostream> 3. 4. void wait(int seconds) 5. { 6. boost::this_thread::sleep(boost::posix_time::seconds(seconds)); 7. } 8. 9.
1. #include <boost/thread.hpp>
2. #include <iostream>
3.
4. void wait(int seconds)
5. {
6. boost::this_thread::sleep(boost::posix_time::seconds(seconds));
7. }
8.
9. boost::mutex mutex;
10.
11. void thread()
12. {
13. for (int i = 0; i < 5; ++i)
14. {
15. //wait(1);
16. mutex.lock();
17. std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
18. mutex.unlock();
19. }
20. }
21.
22. int main()
23. {
24. boost::thread t1(thread);
25. boost::thread t2(thread);
26. t1.join();
27. t2.join();
28. }
释放模式
这两种情况都是正确的。在释放模式下,t1在t2启动之前已经完成。调试和发布之间的差异纯属偶然。因为release运行得更快,所以会得到不同的计时。如果取消注释对
wait()
的调用,很明显这两个线程同时运行。同样,如果将循环的运行次数增加到1000次,可以看到线程是交错的(在我的计算机上是1000次;可能需要更多或更少的时间)
请记住,发布版本是经过优化的,因此任务几乎总是花费较少的时间,并且发布版本中的线程调度可能与调试版本中的线程调度不同
Thread 00153E60: 0
Thread 00153E90: 0
Thread 00153E60: 1
Thread 00153E90: 1
Thread 00153E90: 2
Thread 00153E60: 2
Thread 00153E90: 3
Thread 00153E60: 3
Thread 00153E60: 4
Thread 00153E90: 4
Press any key to continue . . .
Thread 00153D28: 0
Thread 00153D28: 1
Thread 00153D28: 2
Thread 00153D28: 3
Thread 00153D28: 4
Thread 00153D58: 0
Thread 00153D58: 1
Thread 00153D58: 2
Thread 00153D58: 3
Thread 00153D58: 4
Press any key to continue . . .