关于网友提出的“ 关于线程优先级的问题~~”问题疑问,本网通过在网上对“ 关于线程优先级的问题~~”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 关于线程优先级的问题~~
描述: 最近刚研究线程,有点问题想请教,就是在windows中,创建了2个优先级不同的线程,为什么还是会相间调度呢?不是优先级高的线程先执行完再调用优先级低的吗?测试代码如下:
DWORD WINAPI ThreadRun( LPVOID lpParameter )
{
int i = 0;
while ( i != 10 )
{
printf( "Normal Thread is running:\n" );
++i;
}
return 0;
}
DWORD WINAPI IdleThreadRun( LPVOID lpParameter )
{
int i = 0;
while ( i != 10 )
{
printf( "Idle Thread is running:\n" );
++i;
}
return 0;
}
int main()
{
HANDLE hThread[2] = { 0 };
hThread[0] = ::CreateThread( NULL, NULL, IdleThreadRun, NULL, CREATE_SUSPENDED, NULL );
if ( 0 == hThread[0] )
{
cout << "CreateThread error" << endl;
return -1;
}
::SetThreadPriority( hThread[0], THREAD_PRIORITY_IDLE );
hThread[1] = ::CreateThread( NULL, NULL, ThreadRun, NULL, CREATE_SUSPENDED, NULL );
if ( 0 == hThread[1] )
{
cout << "CreateThread error" << endl;
return -1;
}
::SetThreadPriority( hThread[1], THREAD_PRIORITY_NORMAL );
::ResumeThread( hThread[1] );
::ResumeThread( hThread[0] );
::WaitForMultipleObjects( 2, hThread, TRUE, INFINITE );
getchar();
return 0;
}
解决方案1: 如果低优先级的一直得不到运行,会“饿死”的。
解决方案2: 线程的调度由操作系统的内核来进行管理。。。
解决方案3: 你理解由错误
优先级高的线程能够中断优先级低的线程,但是不能完全剥夺优先级低线程的执行权。
因为线程的执行权是由OS调度的
以上介绍了“ 关于线程优先级的问题~~”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3328156.html