多线程文本输出打印到dos控制台重叠/混乱输出

C++ Multi-thread text output print to dos console overlapped/Mess up the outputs

本文关键字:输出 重叠 控制台 混乱 文本 打印 多线程 dos      更新时间:2023-10-16

我有一个从dos提示符执行的多线程程序,使用std::cout有一些打印和输出转储到dos控制台,但是当thread1和thread2完成它的工作然后join()到主应用程序时,一些打印输出和输出重叠并且不对齐(没有换行符,相互运行)。

有时他们是好的。如果你有什么建议,我真的很感激你的帮助。

安德鲁

很简单。输出没有并发控制,因此会出现数据竞争。您需要让线程在使用输出之前锁定互斥锁,然后在完成后释放互斥锁。

我的意思是,如果它们试图同时打印到相同的资源,我希望它们重叠。

处理多线程中共享资源问题的一种常见方法是使用一种称为互斥锁(http://en.wikipedia.org/wiki/Mutex)、信号量(http://en.wikipedia.org/wiki/Semaphore_(programming)的设备,或者简单地使用锁。当线程想要打印时,让它获取"锁令牌",完成后释放它。如果锁令牌已经被占用,该线程将不得不等待,直到它可用。

这绝不是一个完整的解释,而是一些关于这个问题的背景知识。

据我所知,每个人<<cout上的操作符是线程安全的。但我没有证据可以证明这一点。

你可以在stringstream对象中缓冲输出,然后一次将其转储到count(即使用单个<<)操作符)

写入输出不是线程安全的,会导致混合输出。您需要同步对标准输出的访问,以便不超过一个线程可以同时写入输出。最简单的方法是使用互斥锁,这样一个线程"拥有"标准输出,直到它完成写入。