Tôi mới để Tăng luồng và tôi bị mắc kẹt với cách đầu ra được thực hiện từ nhiều luồng. Tôi có một tăng đơn giản :: thread đếm ngược từ 9 đến 1; chủ đề chính chờ đợi và sau đó in "LiftOff .. !!"BOOST luồng: hành vi cout
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
struct callable {
void operator()();
};
void callable::operator()() {
int i = 10;
while(--i > 0) {
cout << "#" << i << ", ";
boost::this_thread::yield();
}
cout.flush();
}
int main() {
callable x;
boost::thread myThread(x);
myThread.join();
cout << "LiftOff..!!" << endl;
return 0;
}
Vấn đề là tôi phải sử dụng câu lệnh "cout.flush()" rõ ràng trong chuỗi để hiển thị đầu ra. Nếu tôi không sử dụng flush(), tôi chỉ nhận được "LiftOff !!" như đầu ra.
Ai đó có thể vui lòng cho biết lý do tôi cần sử dụng lệnh flush() một cách rõ ràng?
Hoạt động theo cách tương tự đối với tôi có hoặc không có 'flush()' (linux 3.0.6, gcc 4.5.3, tăng 1.46). – delicateLatticeworkFever
FWIW, tôi đã thử nghiệm chương trình của bạn trên Win7x64 (MSVC10), và nó in ra các con số mà không cần tuôn ra(). Om bạn thử nghiệm nền tảng nào? –
@KonradRudolph: "điều kiện chủng tộc" sẽ không tạo ra hai bộ đệm đệm riêng biệt, đó là giải thích duy nhất có thể hiểu được vì sao 'endl' trong chính không tuôn ra sau khi chờ đợi trên một chuỗi được nối. (chưa kể: không có "điều kiện chủng tộc" ở đây cả, chỉ có hai chủ đề và một chủ đề chờ đợi.) – delicateLatticeworkFever