此問題爲看雪上的一位兄弟提出問題如下:
#include<iostream.h>
#include<windows.h>
DWORD WINAPI ThreadFun(LPVOID arg);
DWORD i=0;
void main()
{
HANDLE thread;
DWORD threadid;
thread=CreateThread(0,0,ThreadFun,&i,0,&threadid);
cout<<"main thread"<<i++<<endl;
Sleep(1000);
CloseHandle(thread);
}
DWORD WINAPI ThreadFun(LPVOID arg)
{
cout<<"my thread"<<i++<<endl;
return 0;
}
這個程序輸出的兩個結果是
1.
my thread0
my thread0
main thread
Press any key to continue
2.
main thread
main thread
my thread0
Press any key to continue
請問1中my thread0出現兩次是怎麼造成的。
個人總結:
一開始我以爲是線程的問題造成的,經過北極星的提醒,可能的原因如下:
可能緩衝中有一個標記,就是是否已經被輸出而這個程序是多線程,因爲是在控制檯,不排除他們使用的是同一個緩衝區當新線程執行的時候,本來main中剛好輸出完,但沒有及時清空緩衝,標記也沒變成已輸出,然後由於時間片的輪轉, 那麼新線程的cout會將main中的緩衝再次的輸出一次並清理 看雪的帖子路徑爲:http://bbs.pediy.com/showthread.php?t=67776