操作系统大作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:获得当前系统中正在运行的所有进程的优先级

程序源代码:

#include

#include

#include

using std::cout;

using std::endl;

void main(){

//...........初始化存放进程信息的结构体................

PROCESSENTRY32 PR;

::ZeroMemory(&PR,sizeof(PR));

PR.dwSize=sizeof(PR);

//............获得进程快照...........................

HANDLE JinCKZ=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

//............获取进程信息并输出.....................

BOOL ToF=::Process32First(JinCKZ,&PR);//第一个进程

while(ToF){

HANDLE XinXi=::OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,PR.th32ProcessID); if(XinXi!=NULL){

DWORD YouXJ=::GetPriorityClass(XinXi);

//.............输出信息.....................

cout<<"进程ID: "<

switch(YouXJ){

case HIGH_PRIORITY_CLASS:

cout<<"HIGH"<

break;

case NORMAL_PRIORITY_CLASS:

cout<<"NORMAL"<

break;

case IDLE_PRIORITY_CLASS:

cout<<"IDLE"<

break;

case REALTIME_PRIORITY_CLASS:

cout<<"REALTIME"<

break;

default:

cout<<"UNKNOWN"<

break;

}

::CloseHandle(XinXi);

}

//...................转向下一进程..............

ToF=::Process32Next(JinCKZ,&PR);

}

}

运行结果:

对程序的分析:

该程序思路是先获得所有进程的快照,然后逐个将进程的信息放入结构体中,然后将其输出。关键的API为:1.CreateToolhelp32Snapshot()作用为进程拍快照。2 .Process32First()作用为得到第一个进程。3. OpenProcess()打开进程。4. GetPriorityClass()作用为获取优先级。5. CloseHandle()作用为关闭句柄。

实验三:使用互斥对象实现线程同步

⏹两个线程对同一个变量进行访问,其中一个线程

对变量做加1操作,一个线程对其做减1操作。

改变其数值后将该数值写入输出流中

⏹分析:不作同步操作和采用同步操作将分别出现

什么现象

程序源代码:

#include

#include

using namespace std;

long val=0; //共享变量

HANDLE hMutex=NULL; //互斥对象

//..............进程函数................

DWORD WINAPI WorkThread1(LPVOID lParam)

{

WaitForSingleObject(hMutex,INFINITE); //获取互斥对象

val=val+1;

(hMutex); //释放互斥对象

return val;

}

DWORD WINAPI WorkThread2(LPVOID lParam)

{

WaitForSingleObject(hMutex,INFINITE);

val=val-1;

ReleaseMutex(hMutex);

return val;

}

void main()

{

HANDLE hThread1=CreateThread(NULL,0,WorkThread1,NULL,0,NULL); //创建线程WaitForMultipleObjects(1,&hThread1,TRUE,INFINITE); //等待线程结束

cout<

HANDLE hThread2=CreateThread(NULL,0,WorkThread2,NULL,0,NULL);

WaitForMultipleObjects(1,&hThread2,TRUE,INFINITE);

cout<

CloseHandle(hThread1); //关闭句柄

CloseHandle(hThread2);

CloseHandle(hMutex);

}

运行结果:

相关文档
最新文档