मैं सी ++ 11 में थ्रेड का परीक्षण करने के लिए एक सरल प्रोग्राम लिखता हूं लेकिन std::cout
मेरी अपेक्षा के अनुसार काम नहीं करता है।एकाधिक धागे में std :: cout का उपयोग करके
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();
}
परिणाम के कुछ
:
Hello 11376
Hello 16076
Hello 16076
Hello Hello 11376
16076
Hello 11376
,....
मैं धागे ताला लगा तो मैं नहीं कर सकते क्यों दो धागे एक ही समय में std::cout
को क्रियान्वित कर रहे हैं के लिए म्युटेक्स इस्तेमाल किया। यह मेरे लिए बहुत कमजोर है। क्या कोई भी समझा सकता है कि क्या हो रहा है!?
एक बार जब आप उत्तर में दिए गए समाधान को लागू कर लेते हैं तो आपको मैन्युअल लॉक/अनलॉक कॉल के बजाय 'lock_guard' का उपयोग करने के लिए भी जाना चाहिए। और फ्लशिंग परेशान न करें (उदा।, 'Endl' के साथ); बस '\ n' का प्रयोग करें। – bames53