问题描述
代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
sem_t mrc,mwc,wr,wsem,rsem;
int readcount=0;
int writecount=0;
void *read_i(int a)
{
printf("第%d号读者想读\n",a+1);
sem_wait(&rsem);
sem_wait(&mrc);
readcount++;
if(readcount==1)
sem_wait(&wsem);
sem_post(&mrc);
sem_post(&rsem);
printf("第%d号读者开始读文章\n",a+1);
sleep(1);
printf("第%d号读者读完文章\n",a+1);
sem_wait(&mrc);
readcount--;
if(readcount==0)
sem_post(&wsem);
sem_post(&mrc);
}
void *write_j(int b)
{
printf("第%d号写者想写\n",b+1);
sem_wait(&mwc);
writecount++;
if(writecount==1)
sem_wait(&rsem);
sem_post(&mwc);
sem_wait(&wsem);
printf("第%d号写者开始写\n",b+1);
sleep(3);
printf("第%d号写者写完文章\n",b+1);
sem_post(&wsem);
sem_wait(&mwc);
writecount--;
if(writecount==0)
sem_post(&rsem);
sem_post(&mwc);
}
int main()
{
int sg1,sg2,sg3,sg4,sg5;
pthread_t writer[10],reader[10];
sg1=sem_init(&mrc,0,1);
sg2=sem_init(&mwc,0,1);
sg3=sem_init(&wr,0,1);
sg4=sem_init(&wsem,0,1);
sg5=sem_init(&rsem,0,1);
for(int i=0;i<=4;i++)
{
pthread_create(&reader[i],NULL,(void *)read_i,i);
pthread_create(&writer[i],NULL,(void *)write_j,i);
sleep(1);
}
for(int j=0;j<=4;j++)
{
pthread_join(reader[j],NULL);
}
for(int k=0;k<=4;k++)
{
pthread_join(writer[k],NULL);
}
sleep(2);
return 0;
}
运行截图
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)