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