2
C의 세마포어를 사용하여 Reader-Writer의 문제에 대한 간단한 해결책을 작성했습니다. 그러나 모든 성공적인 실행 후에 다른 출력을 얻고 있습니다. 이것의 정확한 이유는 무엇입니까? 여기 코드는 다음과 같습니다리더 작성자 문제 : 매번 다른 출력 얻기
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include<string.h>
sem_t x,wsem;
int rc;
void *reader(void *);
void *writer(void *);
int svar=0;
int main()
{
pthread_t w[2],r[3];
sem_init(&x,0,1);
sem_init(&wsem,0,1);
rc=0;
pthread_create(&w[0],NULL,writer,(void *)0);
pthread_create(&r[0],NULL,reader,(void *)0);
pthread_create(&w[1],NULL,writer,(void *)1);
pthread_create(&r[1],NULL,reader,(void *)1);
pthread_create(&r[2],NULL,reader,(void *)2);
pthread_join(r[0],NULL);
pthread_join(w[0],NULL);
pthread_join(w[1],NULL);
pthread_join(r[1],NULL);
pthread_join(r[2],NULL);
sem_destroy(&x);
sem_destroy(&wsem);
return 0;
}
void *reader(void *arg)
{
printf("\nReader is executing......");
sem_wait(&x);
rc++;
if (rc == 1)
sem_wait(&wsem);
sem_post(&x);
printf("Reader-%d : value of shared variable : %d\n", (int)arg,svar);
sem_wait(&x);
rc--;
if (rc==0)
sem_post(&wsem);
sem_post(&x);
}
void *writer(void *arg)
{
printf("\nWriter is executing......");
sem_wait(&wsem);
svar=svar+5;
printf("Writer-%d : value of shared variable : %d\n",(int)arg,svar);
sem_post(&wsem);
}
Output1 :
Writer is executing......Writer-0 : value of shared variable : 5
Reader is executing......Reader-0 : value of shared variable : 5
Reader is executing......Reader-1 : value of shared variable : 5
Writer is executing......Writer-1 : value of shared variable : 10
Reader is executing......Reader-2 : value of shared variable : 10
Output2:
Writer is executing......Writer-0 : value of shared variable : 5
Writer is executing......Writer-1 : value of shared variable : 10
Reader is executing......Reader-1 : value of shared variable : 10
Reader is executing......Reader-0 : value of shared variable : 10
Reader is executing......Reader-2 : value of shared variable : 10
Output3:
Writer is executing......Writer-0 : value of shared variable : 5
Writer is executing......Writer-1 : value of shared variable : 10
Reader is executing......Reader-1 : value of shared variable : 10
Reader is executing......Reader-0 : value of shared variable : 10
Reader is executing......Reader-2 : value of shared variable : 10
코드를 다시 포맷하십시오. 포함물이 올바르게 표시되지 않습니다. –
@Robin Green : 완료. –
@skaffman : 왜 이것을 C++에 다시 추가 했습니까? 질문 자체는 그가 C를 사용하고 있으며'stdio.h '는 C 헤더이며 C++ 헤더는 아니라고 말합니다. –