#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <semaphore.h>
#include <pthread.h>
#define READER 3
#define WRITER 2
sem_t rmutex,wmutex;
int readercount=0;
int number=0;
int reader_id=0,writer_id=0;
void *Reader()
{
int readernum=++reader_id;
while(1)
{
sem_wait(&rmutex);
if(readercount!=0)
sem_wait(&wmutex);
readercount++;
sem_post(&rmutex);
printf("读者%d读数为%d\n",readernum,number);
sleep(2);
sem_wait(&rmutex);
readercount--;
if(readercount==0)
sem_post(&wmutex);
sem_post(&rmutex);
}
}
void *Writer()
{
int writernum=++writer_id;
while(1)
{
sem_wait(&wmutex);
number++;
printf("写者%d写入数为%d\n",writernum,number);
sleep(3);
sem_post(&wmutex);
}
}
int main()
{
pthread_t reader[READER],writer[WRITER];
int t1,t2;
int init1=sem_init(&rmutex,0,3);
int init2=sem_init(&wmutex,0,2);
for(int i=0;i<READER;i++)
{
t1=pthread_create(&reader[i],NULL,Reader,NULL);
if(t1!=0)
{
printf("reader %d fail to create\n",i);
exit(1);
}
}
for(int i=0;i<WRITER;i++)
{
t2=pthread_create(&writer[i],NULL,Writer,NULL);
if(t2!=0)
{
printf("writer %d fail to create\n",i);
exit(1);
}
}
for(int i=0;i<READER;i++)
{
pthread_join(reader[i],NULL);
}
for(int i=0;i<WRITER;i++)
{
pthread_join(writer[i],NULL);
}
return 0;
}
读者写者算法
最新推荐文章于 2024-01-17 10:01:52 发布