Столкнулся с проблемой. вот код struct work_t { std::deque<int> data; boost::mutex * mutex; }; std::vector<work_t> work_data; void worker (const int & n) { std::ofstream ostr(...); while(!stop) { int s = 0; { boost::mutex::scoped_lock lk(*(work_data[n].mutex)); if(!work_data[n].data.empty()) { s = work_data[n].data.front(); work_data[n].data.pop_front(); } } if(s != 0) { do_some_work(s); } if(have_results) { write_results(ostr); } } } int main() { //... // Заполнение и инициализация массива work_data //.. boost::thread_group grp; for(int i=0;i<nthread;++i) { grp.create_thread(boost::bind(&worker,i)); } grp.join_all(); //... } Каждый поток работает со своей порцией данных. mutex защищающий данные потока, на данный момент, всегда свободен. Т.е. поток никогда не должен в нем засыпать. Если я запускаю 4 потока на машине с AMD Athlon64 3000, то в htop видно что все потоки находятся в состоянии R и отбирают 100% процессорного времени, которое делится между потоками. Вроде все нормально. Но если эти же 4 потока, на тех же самых данных запустить на 4-х процессорной машине с DualCore Opteron 875, то загрузка на всех процесорах не превышает 50% и одновременно работает только 1 или 2 потока остальные висят в состоянии D (насколько я понял это означает что поток заблокирован). Кто-нибудь может мне объяснить с чем связано такое поведение? Хочется все-таки загрузить машину по полной.
Ответ на:
комментарий
от e
Ответ на:
комментарий
от e
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Vinick
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Vinick
Ответ на:
комментарий
от Die-Hard
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум BOOST thread не понимаю ... (2011)
- Форум Boost.Asio и несколько async_write/async_read за раз (2023)
- Форум SMP (2009)
- Форум smp (2007)
- Форум smp? (2001)
- Форум SMP (2005)
- Форум SMP (2005)
- Форум SMP (2005)
- Форум Архиваторы&SMP (2010)
- Форум urandom & SMP (2009)