OS读写操作C语言代码
笑傲心扬吧
全部回复
仅看楼主
level 5
笑傲心扬 楼主
#include
#include
#include
#include
#include
sem_t r_w_w;sem_t mutex;int readCount=0; char info[80]; int Reader(int *r_n){ int j=0; char rc[80]; while(j<10){j++; sleep(*r_n+2); sem_wait(&mutex); readCount++; if(readCount==1) { sem_wait(&r_w_w); printf("First reader(%d) has intered the CR!\n",*r_n); } sem_post(&mutex); sleep(*r_n+5); printf("The %dth(/%d) reader is reading:",*r_n,readCount); strcpy(rc,info); printf("%s\n",rc); sem_wait(&mutex); readCount--; if(readCount==0) sem_post(&r_w_w); printf("The %dth reader exit.\n",*r_n); sem_post(&mutex); }}int Writer(int *w_n) { char ws[80]; int j=0; sprintf(ws,"The information that the %dth writer writes is read",*w_n); while(j<10){j++; sleep(*w_n+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 *)Writer,&(stack[4096]), clone_flag,(void *)&arg); } sleep(5); for(i=0;i<4;i++){ arg=i+1; stack=(char *) malloc(4096); clone((void *)Reader,&(stack[4096]), clone_flag,(void *)&arg); } exit(1);}
2007年12月05日 01点12分 1
level 5
笑傲心扬 楼主
谢谢呀。。
2007年12月05日 01点12分 2
1