我看到很多人对这样一个问题寻求帮助:在多线程时,往控制台窗口输出的内容是乱序的。举个非常简单的例子,如下:
#include "stdafx.h"
#include <Windows.h>
using namespace std;
DWORD WINAPI ThreadProc1(
{
}
DWORD WINAPI ThreadProc2(
{
}
int _tmain(int argc, _TCHAR* argv[])
{
}
创建了两个子线程,每个子线程各自输出内容。运行结果:控制台上输出的内容是乱序的,而且每次结果不尽相同。
原因:往控制台窗口输出的过程(cout)并不是多线程安全的,在一个线程输出过程中另一个线程也可以输出。
解决办法:对输出出进行同步,利用临界区就可以很容易办到。代码修改如下:
CRITICAL_SECTION g_CS;
InitializeCriticalSectio
在所有涉及到输出的地方改为:
总结:在编写多线程的程序时,一定要特别注意同步的问题,仔细的考虑清楚哪些变量、资源、操作需要进行同步,否则就会得到莫名其妙的结果。
多线程下COUT输出乱码
精选 转载上一篇:C++多线程 生产者和消费问题
下一篇:C++ 读者与写者问题
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【Netty】NIO 缓冲区 ( Buffer ) ( 缓冲区读写类型 | 只读缓冲区 | 映射字节缓冲区 )
I . 缓冲区 ( Buffer ) 存取类型II . 只读缓冲区 ( ReadOnlyBuffer )III . 映射字节缓冲区 ( MappedByteBuffer )
NIO Buffer ReadOnlyBuffer 映射字节缓冲区 只读缓冲区