Tôi viết một chương trình đơn giản để kiểm tra Chủ đề trong C++ 11 nhưng std::cout
không hoạt động như tôi mong đợi.sử dụng std :: cout trong nhiều chủ đề
class Printer
{
public:
void exec()
{
mutex m;
m.lock();
cout<<"Hello "<<this_thread::get_id()<<endl;
chrono::milliseconds duration(100);
this_thread::sleep_for(duration);
m.unlock();
}
};
int main()
{
Printer printer;
thread firstThread([&printer](){
while(1)
printer.exec();
});
thread secondThread([&printer](){
while(1)
printer.exec();
});
firstThread.join();
secondThread.join();
}
một số kết quả:
Hello 11376
Hello 16076
Hello 16076
Hello Hello 11376
16076
Hello 11376
,....
tôi đã sử dụng mutex cho khóa đề vì vậy tôi không thể hiểu tại sao hai luồng đang thực hiện std::cout
cùng một lúc. Đường nối rất mệt mỏi với tôi. Có ai giải thích điều gì đang xảy ra không?!
Khi bạn triển khai giải pháp được cung cấp trong câu trả lời, bạn cũng nên chuyển sang sử dụng 'lock_guard' thay vì các cuộc gọi khóa/mở khóa thủ công. Và đừng làm phiền (ví dụ, với 'endl'); chỉ cần sử dụng '\ n'. – bames53