多线程文本输出打印到dos控制台重叠/混乱输出
C++ Multi-thread text output print to dos console overlapped/Mess up the outputs
我有一个从dos提示符执行的多线程程序,使用std::cout有一些打印和输出转储到dos控制台,但是当thread1和thread2完成它的工作然后join()到主应用程序时,一些打印输出和输出重叠并且不对齐(没有换行符,相互运行)。
有时他们是好的。如果你有什么建议,我真的很感激你的帮助。
安德鲁很简单。输出没有并发控制,因此会出现数据竞争。您需要让线程在使用输出之前锁定互斥锁,然后在完成后释放互斥锁。
我的意思是,如果它们试图同时打印到相同的资源,我希望它们重叠。
处理多线程中共享资源问题的一种常见方法是使用一种称为互斥锁(http://en.wikipedia.org/wiki/Mutex)、信号量(http://en.wikipedia.org/wiki/Semaphore_(programming)的设备,或者简单地使用锁。当线程想要打印时,让它获取"锁令牌",完成后释放它。如果锁令牌已经被占用,该线程将不得不等待,直到它可用。这绝不是一个完整的解释,而是一些关于这个问题的背景知识。
据我所知,每个人<<cout上的操作符是线程安全的。但我没有证据可以证明这一点。
你可以在stringstream对象中缓冲输出,然后一次将其转储到count(即使用单个<<)操作符)
写入输出不是线程安全的,会导致混合输出。您需要同步对标准输出的访问,以便不超过一个线程可以同时写入输出。最简单的方法是使用互斥锁,这样一个线程"拥有"标准输出,直到它完成写入。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- Ardunio UNO解决了多个重叠的定时器循环
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++格式化输出问题
- 矩阵 A 的输出与矩阵 B 重叠
- 输出到控制台重叠
- 给定一个区间向量,输出区间内重叠次数最多的任意一个数字
- 多线程文本输出打印到dos控制台重叠/混乱输出