笑傲心扬吧 关注:2贴子:91
  • 1回复贴,共1

OS读写操作C语言代码

只看楼主收藏回复

#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[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);
}



IP属地:福建1楼2007-12-05 09:18回复
    谢谢呀。


    IP属地:福建2楼2007-12-05 09:19
    回复