Я не знаю, связана ли эта тема с библиотекой std :: thread или потоками. Посмотрите на следующий пример:Странное поведение библиотеки потоков
#include <thread>
#include <iostream>
void read(){
int bar;
std::cout << "Enter an int: ";
std::cin >> bar;
}
void print(){
std::cout << "foo";
}
int main(){
std::thread rT(read);
std::thread pT(print);
rT.join();
pT.join();
return 0;
}
Я не волнует, если он напечатает «Foo» строку до или после выполнения функции чтения(). Меня беспокоит тот факт, что когда он запрашивает ввод перед выполнением функции print(), он фактически зависает. Мне нужно нажать «ввести» или передать std :: cin с некоторыми данными, чтобы увидеть строку «foo». Ниже вы можете видеть три возможных сценария того, как эта программа ведет себя:
1.
>> Enter an int: //here I've clicked enter
>> foo
>> 12 //here I've written "12" and clicked enter
//end of execution
2.
>> fooEnter an int: 12 //here I've written "12" and clicked enter
//end of execution
3.
>> Enter an int: 12 //here I've written "12" and clicked enter
>> foo
//end of execution
Как вы можете видеть, иногда я должен нажать войти, чтобы увидеть «Foo» строку. По-моему, он должен печататься каждый раз, так как он был запущен в отдельном потоке. Может быть, std :: cin каким-то образом блокирует std :: cout? Если да, то что мне делать?
'std :: endl' является альтернативой, так как это в основном' \ n '+ std :: flush' – MSalters