Académique Documents
Professionnel Documents
Culture Documents
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include<stdlib.h>
#define buffersize 10
pthread_mutex_t mutex;
pthread_t tidR[20],tidW[20];
sem_t wrt;
int readcount,item;
int buffer[buffersize];
void initialize()
{
pthread_mutex_init(&mutex,NULL);
sem_init(&wrt,1,1);
readcount=0;
}
void *reader(void *param){
pthread_mutex_lock(&mutex) ;
readcount ++ ;
if (readcount == 1)
sem_wait(&wrt) ;
pthread_mutex_unlock(&mutex);
item=read();
printf("\nReader has read the item: %d\n",item);
// reading is performed
pthread_mutex_lock(&mutex) ;
readcount--;
if (readcount == 0)
sem_post(&wrt) ;
pthread_mutex_unlock(&mutex) ;
}
int read()
{
return(buffer[--readcount]);
}
int main()
{
int n1,n2,i;
initialize();
printf("\nEnter the no of readers: ");
scanf("%d",&n1);
printf("\nEnter the no of writerss: ");
scanf("%d",&n2);
for(i=0;i<n1;i++)
pthread_create(&tidW[i],NULL,writer,NULL);
for(i=0;i<n2;i++)
pthread_create(&tidR[i],NULL,reader,NULL);
for(i=0;i<n1;i++)
pthread_join(tidW[i],NULL);
for(i=0;i<n2;i++)
pthread_join(tidR[i],NULL);
//sleep(5);
exit(0);
}
DINING PHILOSOPHER
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include<stdlib.h>
pthread_mutex_t mutex;
pthread_t tid[5];
sem_t chopstick[5];
void initialize()
{
pthread_mutex_init(&mutex,NULL);
for(int i=0;i<5;i++)
sem_init(&chopstick[i],1,1);// shared or not , starting value
void main()
{
int n=5,i;
initialize();
for(i=0;i<n;i++)
pthread_create(&tid[i],NULL,philosopher,NULL);
printf("Thread Created\n");
for(i=0;i<n;i++)
pthread_join(tid[i],NULL);
exit(0);
}