Я думаю, что я также должен получить три '\ n', верно?
В вашем выводе три '\n'
рассматриваемых символа . Они находятся в конце первых трех строк вывода.
Я думаю, вы, возможно, неправильно поняли, что означает эта строка из вашего примера:
std::cout << "Inside Thread :: ID = " << std::this_thread::get_id() << std::endl;
В этой строке кода есть четыре отдельных вызова функций. Эта строка делает то же самое, что и эти четыре строки:
std::cout << "Inside Thread :: ID = ";
auto id = std::this_thread::get_id();
std::cout << id;
std::cout << std::endl;
Даже если предположить, что объект std::cout
полностью синхронизирован, Вы не сделали ничего, чтобы помешать различным потокам чередовать отдельные вызовы функций. Например.,
- вызов основного потока
std::cout << "Both threads have different id";
- threadObj1 звонит
std::cout << "Inside Thread :: ID = ";
- threadObj2 вызывает
std::cout << "Inside Thread :: ID = ";
- вызов основного потока
std::cout << std::endl;
- threadObj1 звонит
std::cout << std::this_thread::get_id();
- threadObj1 звонит
stc::cout << std::endl;
- и т.д.