Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вопрос по Boost::threads


Автор: pento 20.1.2007, 23:14
Имеем
Код

void fuck() {
    boost::mutex::scoped_lock lock(io_mutex);
    cout << "Hello, world" << endl;
};

int main() {
    cout << "Begin"  << endl;
    boost::thread thrd1(&fuck);
    boost::thread thrd2(&fuck);
    boost::thread thrd3(&fuck);
    cout << "Before thrd1"  << endl;
    thrd1.join();
    cout << "Before thrd2"  << endl;
    thrd2.join();
    cout << "Before thrd3"  << endl;
    thrd3.join();
    cout << "End"  << endl;
    return 0;
}


Вывод:
Код

Begin
Hello, world
Hello, world
Before thrd1
Before thrd2
Before thrd3
Hello, world
End

Почему не
Код

Begin
Before thrd1
Hello, world
Before thrd2
Hello, world
Before thrd3
Hello, world
End

?


Автор: bsa 20.1.2007, 23:38
join() - читай не как передача управления потоку, а ожидание завершения потока. Потоки выполняются параллельно основной программе, поэтому вывод может быть любым. Теоретически, даже поток номер 3 может выполнится раньше второго.

Автор: pento 21.1.2007, 12:31
bsa, понятно. Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)