#include <stdio.h>
#include <semaphore.h>
#include <pthread.h>
#include <stdlib.h>
#include <sched.h>
sem_t r_w_w;
sem_t mutex;
int readCount=0;
char info[20];
int Reader(int r_n)
{
char rc[20];
while(1){
sem_wait(&mutex);
readCount++;
if(readCount==1)
{
sem_wait(&r_w_w);
printf("First reader inter CR!\n");
}
sem_post(&mutex);
printf("%dth reader is reading:",r_n);
strcpy(rc,info);
printf("%s\n",rc);
sem_wait(&mutex);
readCount--;
if(readCount==0)
sem_post(&r_w_w);
printf("%dth reader exit.\n",r_n);
sem_post(&mutex);
}
}
int Writer(int w_n)
{
char ws[20];
sprintf(ws,"%dth writer",w_n);
while(1){
sem_wait(&r_w_w);
strcpy(info,ws);
sem_post(&r_w_w);
}
}
main(){
int i,arg;
int clone_flag;
char *stack;
sem_init(&r_w_w,0,1);
sem_init(&mutex,0,1);
clone_flag=CLONE_VM|CLONE_SIGHAND |CLONE_FS|CLONE_FILES;
for(i=0;i<4;i++){
arg=i+1;
stack=(char *) malloc(4096);
clone((void *)Reader,&(stack[4096]),
clone_flag,(void *)&arg);
stack=(char *) malloc(4096);
clone((void *)Writer,&(stack[4096]),
clone_flag,(void *)&arg);
}
exit(1);
}
- 1 回答
- 0 关注
- 1173 浏览
添加回答
举报
0/150
提交
取消