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