}
WaitForSingleObject(mutex,INFINITE);//p(&mutex) number++; int temp=number;
cout<<\顾客\< cout<<\顾客\< ReleaseSemaphore(seat,1,NULL);//v(&seat) cout<<\顾客\< WaitForSingleObject(s1,INFINITE);//p(&s1) DWORD WINAPI consumer2(PVOID c2pv)//顾客对公线程代码 { } int main(void)//主程序 {//创建信号量和线程 cout<<\顾客您好,欢迎来到我行,很高兴为您服务!\< for(n=0;n WaitForSingleObject(seat,INFINITE);//p(&seat) WaitForSingleObject(mutex,INFINITE);//p(&mutex) number++; int temp=number; cout<<\顾客\< cout<<\顾客\< ReleaseSemaphore(seat,1,NULL);//v(&seat) cout<<\顾客\< WaitForSingleObject(s2,INFINITE);//p(&s2) } ss1[n]=CreateThread(NULL,0,server1,NULL,0,NULL); ss2[n]=CreateThread(NULL,0,server2,NULL,0,NULL); for(n=0;n srand( (unsigned)time( NULL ) ); n=0;n1=0; for(;number Sleep(20000); cout<<\银行结束服务,祝您愉快!\< int m=rand()%CUSTOMER_COMING_TIME; Sleep(m); int i=rand()%2; if(i==0) { } else { } c2[n1]=CreateThread(NULL,0,consumer2,NULL,0,NULL); n1++; c1[n]=CreateThread(NULL,0,consumer1,NULL,0,NULL); n++; 七、实验结果及程序分析 1、实验结果: (中间部分省略) 2、结果分析: 当顾客来了,首先查看是否有桌位,有桌位就去取号,取完号之后等 待服务,当营业员叫号以后开始被服务,服务完了之后离开。当所有线程执行完了之后程序结束。由于线程之间的同步执行,导致输出有点重叠。 八、课设总结 课程设计是一项复杂的工作,在程序设计的过程中,许多我们认为应该是正确的代码,往往不能运行我们想要的结果。这就需要我们的耐心与细心,去纠正任何一个可能的细小错误。此次操作系统课程设计,在指导教师的精心教导下,我们学会了如何采用系统调用中的信号量、P、V操作,编程解决银行窗口服务的功能。在编程的过程中,首先我们要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。计算机是一台聪明又笨拙的机器,只有我们的代码完全正确时,它才能准确地运行。 总的来说,通过这次课程设计,我将所学到的知识运用到了实践中,虽然在设计过程中遇到很大的困难,但是在老师和同学的 帮助下我克服了很多困难,并且最终获得了成功。从程序设计的过程中,我熟悉了 VC6.0 的运行环境,也熟悉了 Windows2000 的操作系统,学到了很多的知识,这些都令我受益匪浅。因此,在以后的 学习中,我可以学会自己编写一些类似的简单程序,将学到的东西加以实际的运用。