⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chengxuyuanma.txt

📁 用多线程同步方法解决读者阅览问题 1) 每个读者进入阅览室后
💻 TXT
字号:

#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>
#include<stdlib.h>
#include<unistd.h>
int i=0,n=0,count=0;
int position[6]={-1,-1,-1,-1,-1,-1};
pthread_mutex_t mutex;
sem_t empty;
time_t end;
int chair[10];
int j,k,p;
int curr=1;

void *reader(void* arg);
main()
{
 pthread_t id[10];
 pthread_mutex_init(&mutex,NULL);
 sem_init(&empty,0,5);
 time_t t;
 srand((unsigned)time(&t));
end=time(NULL)+60;

for(i=0;i<10;++i)
{pthread_create(&id[i],NULL,(void*)reader,(void*)i);
pthread_join(id[i],NULL);
}
}

void *reader(void *arg)
{while(time(NULL)<end)
{ sem_wait(&empty);
  pthread_mutex_lock(&mutex);
curr=0;
count++;
j=1;
while(curr==0&&j<6){
if(chair[j]==-1){
curr=j;
}
j++;
}
position[curr]=1;
k=arg;
chair[k]=curr;
printf("Reader%d entered and sat at %dth chair.NOW the total number is %d.\n",arg,curr,count);

pthread_mutex_unlock(&mutex);
sleep(1);
pthread_mutex_lock(&mutex);
count--;
k=arg;
position[chair[k]]=-1;
pthread_mutex_unlock(&mutex);
sem_post(&empty);
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -