|
2鱼币
本帖最后由 fanki 于 2013-6-7 22:02 编辑
同样的代码,不同的结果,xp可以跑出想要的效果,可是win7下不能,求说明win7为什么会这样输出?想知道真相,谢谢
代码如下:
头文件没有改动,创建的是控制台,简单的。
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
CRITICAL_SECTION cs = { 0 };
DWORD CALLBACK TestProc1( LPVOID pParam )
{
//for ( int i = 0; i < 10; i++ )
while( 1 )
{
EnterCriticalSection( &cs );
printf( "********\n" );
Sleep( 100 );
LeaveCriticalSection( &cs );
}
return 0;
}
DWORD CALLBACK TestProc2( LPVOID pParam )
{
//for ( int i = 0; i < 10; i++ )
while( 1 )
{
EnterCriticalSection( &cs );
printf( "--------\n" );
Sleep( 100 );
LeaveCriticalSection( &cs );
}
return 0;
}
int main(int argc, char* argv[])
{
InitializeCriticalSection( &cs );
DWORD nID = 0;
HANDLE hThread[2] = { 0 };
hThread[0] = CreateThread( NULL, 0, TestProc1, NULL,
0, &nID );
hThread[1] = CreateThread( NULL, 0, TestProc2, NULL,
0, &nID );
WaitForMultipleObjects( 2, hThread, TRUE, INFINITE );
CloseHandle( hThread[0] );
CloseHandle( hThread[1] );
DeleteCriticalSection( &cs );
return 0;
}
谢谢大家帮助,我想和大家一起学得更多,更好。
|
最佳答案
查看完整内容
临界区具有“线程拥有权”的概念,因此,第一段代码可以连续进入5次临界区,再让第二段代码进入。临界区只能保证上面两段代码的互斥关系,不能保证两段代码的执行顺序。要保证执行顺序应该使用事件或信号量。
|