• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

在windows下如何用VS处理多线程贪睡理发师问题?

cbe60da68f3c51ae 2020-05-29 浏览量:894

在windows下如何用VS处理多线程贪睡理发师问题?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:4
  • 1、嗜睡的理发师问题:一个理发店由一个有N张沙发的等候室和一个放有一张理发椅的理发室组成。没有顾客要理发时,理发师便去睡觉。当一个顾客走进理发店时,如果所有的沙发都已经占用,他便离开理发店;否则,如果理发师正在为其他顾客理发,则该顾客就找一张空沙发坐下等待;如果理发师因无顾客正在睡觉,则由新到的顾客唤醒理发师为其理发。在理发完成后,顾客必须付费,直到理发师收费后才能离开理发店,试用信号量实现这一同步问题。 int waiting ;//等候理发的顾客数 int CHAIRSr;//为顾客准备的椅子数 semaphore Customersbabersmutex; Customers=0; barbers=0; waiting=0; mutex=1; barber( )//理发师进程 { while(TRUE) { wait(customers); //若无顾客,理发师睡眠 wait(mutex);//进程互斥 waiting=waiting-1;//等待顾客数少一 signal(barbers);//理发师去为一个顾客服务 signal(mutex);//离开临界区 Cut_hair(); } } Customer (int i) { wait(mutex);//进程互斥 if(waiting<CHAIRS)//看看有没有空椅子 { waiting=waiting+1;//等候顾客数加1 signal(customers);//必要的话唤醒理发师 signal(mutex);//开放临界区 wait(barbers);//无理发师,顾客等待 get_haircut();//一个顾客坐下等理发 } else signal(mutex);//人满了,走吧 }

  • 这个问题的解答和系统其实是没有关系的吧,起码核心代码部分是系统无关的。

    VS一样可以编写控制台类的程序,不用windows相应库就好的,完全可用编译只用到标准库的程序啊。

  • 多线程编写,可以写一个章节了。你这个需要开线程池,更是复杂了。找个vc6.0关于多线程的教程吧。一句两句哪里说得清楚。贴代码也是灌水了。

  • 这无非就是一个信号量保护临界区的问题,临界区就是那个沙发,信号量计数上限就是椅子的张数

    随便找个讲同步互斥的教程看下

相关问题

问题达人换一批

在windows下如何用VS处理多线程贪睡理发师问题?