semaphore.c
#include <time.h>
#include <stdio.h>
#include <semaphore.h>
#include <stdint.h>
#include <pthread.h>
#include <stdlib.h>
sem_t Mutex;
sem_t Full;
sem_t Empty;
int a[100];
int count = 0;
int i = 0;
void * WriteArray(void *number)
{
int n = (intptr_t) number;
while(1)
{
if(count == 1) sem_post(&Full); // NẾU MẢNG KO RỖNG - ĐỢI ĐỌC
else if(count == n) sem_wait(&Empty); // NẾU CUỐI MẢNG - ĐỢI ĐỌC
sem_wait(&Mutex);
srand(time(NULL));
i = rand()%(n);
printf("A [ %d ] = ",i);
scanf("%d",&a[i]);
//a[i]=rand()%(99+1);
count++;
sem_post(&Mutex);
}
}
void * ReadArray(void *number)
{
int n = (intptr_t) number;
while(1)
{
if(count == 0) sem_wait(&Full); // NẾU MẢNG RỖNG - CHỜ GHI
else if(count == n-1) sem_post(&Empty); // NẾU MẢNG ĐẦY - CHỜ GHI
sem_wait(&Mutex);
printf("A [ %d ] = %d\n",i,a[i]);
count--;
sem_post(&Mutex);
}
}
int main()
{
int n;
printf("Nhap so luong phan tu trong mang: ");
scanf("%d",&n);
pthread_t Write;
pthread_t Read;
sem_init(&Mutex,0,1);
sem_init(&Full,0,0);
sem_init(&Empty,0,n);
pthread_create(&Write ,NULL , ReadArray, (void *)(intptr_t)n);
pthread_create(&Read ,NULL , WriteArray,(void *)(intptr_t)n);
pthread_join(Read,NULL);
pthread_join(Write, NULL);
return 0;
}
Public Shared Edit Last updated: 2017-04-09 08:27:18 AM