در c++11
thread safe cout هست یعنی مثلا اگر همزمان 2 تا thread داخل شی cout بنویسین buffer مربوطه خراب نمیشه و data race نداریم .
و این که اگر همزمان از cerr , cout ,clog داخل thread های مختلف استفاده کنید این 3 تا به درستی با هم sync هم میشن.
ولی زمان نشان دادن خروجی ممکنه خروجی تفاوت داشته باشه و اون چیزی که انتظار داریم نباشه.
مثلا
cout<<"a b"; //from thread 1
cout<<"d f"; // from thread 2
خروجی که نشان داده میشه میتونه a b d f باشه میتونه a d b f باشه و یا هر ترکیب دیگه ای .برای جلوگیری از این مشکل باید از mutex استفاده کنین .