views:

83

answers:

2

Can anyone tell what's going on here? When I try debug the code and when the control is in thread() function at Line 15, it skips over the Line 16 move to Line 17 and goes back Line 16. Why wouldn't it move Line by Line?

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. }
+4  A: 

Possibly your debugger is actually stepping several threads in parallel which is why it appears to jump back and forth. Try printing the thread ID from your debugger and you'll probably see different numbers at each stop.

Another reason for weird jumping in debug is if the code is optimized. If so, the source code order doesn't neccessairy match the compiled code

Isak Savo
A: 

What does your output look like when it jumps? It looks like it could be a multiple threads issue.

schar