您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> 关于线程优先级的问题~~

关于线程优先级的问题~~

来源:网络整理     时间:2016/8/16 13:09:13     关键词:

关于网友提出的“ 关于线程优先级的问题~~”问题疑问,本网通过在网上对“ 关于线程优先级的问题~~”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于线程优先级的问题~~
描述:

最近刚研究线程,有点问题想请教,就是在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

相关图片

相关文章