多线程小问题
先看代码:
#include "stdafx.h"
#include <windows .h >
#include "stdio .h "
UNIT PrintHello (LPVOID lpparam );
int main ()
{
DWORD threadid ;
printf ("1\n ");
CreateThread (NULL ,NULL ,(LPTHREAD_START_ROUTINE )Printf Hello ,0,NULL ,&Thread );
printf ("2\n ");
getchar ();
return 0;
}
UINT PrintfHello (LPVOID lpparam )
{
printf ("0\n ");
return 0;
}
手机手打,有些错误,在这里请稍做修改,不用回帖提及。
问题:我在三个打印函数前加断点,输出的结果会出现2打印两次的情况,这是什么原因?
[解决办法]
printf是c运行库函数,而CreateThread创建的多线程方式是共享C运行库资源。也就是多个线程访问的是同一个资源,并不是访问自己的资源,会导致共享被另一线程所修改。
所以就出现了_beginthread和_beginthreadex。
[解决办法]
vc6 老问题了. 自己去看看vc6版本的printf实现.