Увеличить многопоточность - PullRequest
4 голосов
/ 13 мая 2010

Может кто-нибудь сказать, что здесь происходит? Когда я пытаюсь отладить код и когда элемент управления находится в функции thread () в строке 15, он пропускает переход по строке 16 к строке 17 и возвращается к строке 16. Почему он не будет перемещаться строка за строкой?

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. }

Ответы [ 2 ]

5 голосов
/ 13 мая 2010

Возможно, ваш отладчик на самом деле выполняет параллельное выполнение нескольких потоков, поэтому он, кажется, прыгает вперед и назад. Попробуйте напечатать идентификатор потока из вашего отладчика, и вы, вероятно, увидите разные цифры на каждой остановке.

Другая причина странных прыжков в отладке заключается в том, что код оптимизирован. Если это так, порядок исходного кода не обязательно совпадает с скомпилированным кодом

0 голосов
/ 13 мая 2010

Как выглядит ваш вывод, когда он скачет? Похоже, это может быть проблема с несколькими потоками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...