Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在发布版本中增强线程同步_C++_Multithreading_Boost - Fatal编程技术网

C++ 在发布版本中增强线程同步

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.

当我尝试在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. 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 . . .