Рассмотрим функцию, которая принимает массив из 100 элементов данных и выводит их на консоль.
Теперь предположим, что я запускаю два потока функции на многоядерной машине. Поскольку это многоядерная машина, существует большая вероятность того, что два потока выполняются на двух ядрах. Поскольку им обоим нужно отображать данные, существует гонка за консольное окно.
Теперь, как консоль распределяется между потоками?
Тот, который первым достигает std::cout
, отображает все данные, останавливая другой поток.? или Время окна консоли распределяется между потоками? если да, то что определяет количество времени, разделяемого потоками?
cout
из нескольких потоков, не имеет неопределенного поведения) 18.09.2013cout << 123 << 456 << endl
параллельно сcout << 321 << 654 << endl;
создаст одну строку123456
, за которой следует или предшествует321456
, или они могут быть произвольно смешаны любым способом, которым они выполняются? Так как, насколько я понимаю, одна такая строка транслируется вcout.operator<<(123), cout.operator<<(456), cout.operator<<(endl);
- где, возможно, каждый вызовoperator<<
может быть синхронизирован, но точно не вся строка кода. 18.09.2013