два вопроса:
1) то есть как я понял мы джойним поток только тогда, когда мы хотим чтоб родительский поток просто не завершался? или засуспендился именно на той позиции, где был вызван джойн? я могу например std::cin.get() вместо t1.join(); t2.join(); использовать в коде выше и будет абсолютно то же самое? по крайней мере у меня все замечательно
2) https://i.imgur.com/Kv3pHsg.png при запуске вот такая ситуация. ситуация 1 - почему бывают пропуски? ситуация 2 - почему ничего не крашится и оба занчения спокойно пишутся рядом друг с другом? это значит что они АБСОЛЮТНО одновременно залетели в stdout? в промежуток до того как он очистился. не совсем понимаю этот момент как они именно одновременно умудряются залазить
1) джойним когда хотим гарантировать что в этой точке поток завершён
1) когда ты пишешь t.join(), то поток, в котором ты это написал дожидается того, когда закончит выполнение функция, выполняемая в t
2) потому что происходит data race
Обсуждают сегодня