• 大小: 2KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: C/C++
  • 标签: C语言  阅览室  

资源简介

阅览室里有20个座位,外面有10个等待位,若读者来时发现等待位已满则离去。用C语言多线程实现,用信号量实现同步互斥

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 

#define READING 0;
#define WAITING 1;

int readerNum=0;
int waitNum=0;

sem_t synchronize;
sem_t seat;
sem_t room;

void *waitingroom() {
    while(1) {
sem_wait(&synchronize);
sem_wait(&seat);
waitNum=waitNum+1;
printf(“There are %d readers reading. \n“ readerNum);
printf(“There are %d readers waiting. \n“ waitNum);
    }
}

void *come() {
    while(1) {
      printf(“---------------------------------\n“);
      printf(“A new reader comes. \n“);
      
      if(readerNum>=20&&waitNum>=10) {
printf(“The reader left. \n“);
      }else if(readerNum>=20) {
  printf(“A new reader is waiting. \n“);
  sem_post(&synchronize);
  sem_wait(&room);
      }else {
readerNum=readerNum+1;
printf(“There are %d readers reading. \n“ readerNum);
printf(“There are %d readers waiting. \n“ waitNum);
      }

      sleep(1);
    }
    
}

int main() {
    int res;
    pthread_t thread;
  

评论

共有 条评论