• 大小: 2KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-05-16
  • 语言: C/C++
  • 标签: linux  进程  线程  

资源简介

理发师问题的描述:一个理发店接待室有n张椅子,工作室有1张椅子;没有顾客时,理发师睡觉;第一个顾客来到时,必须将理发师唤醒;顾客来时如果还有空座的话,他就坐在一个座位上等待;如果顾客来时没有空座位了,他就离开,不理发了;当理发师处理完所有顾客,而又没有新顾客来时,他又开始睡觉。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include
#include
using namespace std;
static int seatNumber=30;
int seatChair=0; //waiting customs
int flag=0;
queue guestQueue;
int mutex=1;
void down(int *x)
{
    while(true)
        if(*x>0)
        {
            *x=0;
            break;
        }
}
void up(int *x)
{
    *x=*x+1;
}
void *thread(void *ptr)
{
    while(true)
    {
        flag++;
        down(&mutex);
        if(seatNumber>0)
        {
            seatNumber--;
            guestQueue.push(flag);
            printf(“gest comming: %d-----seatNumber:%d \n“flagseatNumber);
        }
        else
        {
            printf(“gest gone-----%d-----seatNumber:%d \n“flagseatNumber);
        }
        up(&mutex);
        if(guestQueue.size()>20)sleep(1);
    }
}
int main(void)
{
     pthread_t id;
    int ret;
    ret=pthread_create(&idNULLthreadNULL);
    if(ret!=0){
        printf (“Create pthread error!\n“);
        exit (1);
    }else{
        printf (“Create pthread success!\n“);

        while(true)
        {
            if(guestQueue.size()<10)sleep(1);
            down(&mutex);
            int guestFlag

评论

共有 条评论