chengxuyuanma.txt
来自「用多线程同步方法解决读者阅览问题 1) 每个读者进入阅览室后」· 文本 代码 · 共 62 行
TXT
62 行
#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 + =
减小字号Ctrl + -
显示快捷键?