关于设置线程优先级问题!
- C/C++ code
#include<iostream> #include<windows.h> using namespace std;DWORD WINAPI Threadpro(LPVOID lp);DWORD dwThreadId[2]; void main() { HANDLE hthread1; HANDLE hthread2; //创建两个线程,每个线程给予的标志都是挂起的。 hthread1=::CreateThread(NULL,NULL,Threadpro,NULL,CREATE_SUSPENDED ,&dwThreadId[0]); cout<<"创建的第一个线程ID:"<<dwThreadId[0]<<endl; hthread2=::CreateThread(NULL,NULL,Threadpro,NULL,CREATE_SUSPENDED ,&dwThreadId[1]); cout<<"创建的第二个线程ID:"<<dwThreadId[1]<<endl; //修改两个线程的优先级。第一线程是高于正常,第二个线程是最低 ::SetThreadPriority(hthread1,THREAD_PRIORITY_ABOVE_NORMAL); ::SetThreadPriority(hthread2,THREAD_PRIORITY_LOWEST)); //同时唤起两个线程 ::ResumeThread(hthread1); //::WaitForSingleObject(hthread1,INFINITE);这个行我注释掉了。 ::ResumeThread(hthread2); //因为设置时第二个线程低于第一个线程,所以等第二个线程结束关闭线程句柄。 ::WaitForSingleObject(hthread2,INFINITE); ::CloseHandle(hthread2); ::CloseHandle(hthread1);} DWORD WINAPI Threadpro(LPVOID lp){ int i=0; while(i<20) { cout<<"这个线程正在运行:输出线程ID:"<<::GetCurrentThreadId()<<"程序输出数据:"<<i<<endl; i++; } return 0;}我想要的结果是,第一个优先比较高的线程先运行,而且运行全部结束。继续运行第二个线程。
但是程序的结果是。再第一个线程运行的时候,那个优先比较低的线程还是会运行。不是按照优先级规定运行。
想问下,为什么是这样子。还是我对线程的优先级理解错误!
[解决办法]
低优先级的线程并不是代表不能抢占到cpu,
多次io等待都会造成线程优先级提升,还有资源问题,长时间未获得会造成cpu饥渴,具体饥渴时间忘了,会提升优先级到最高,使低优先级线程能拿到所需资源
还有多核的情况下,也会有lz的情况