⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 多线程的出版商和用户的过程的模拟
💻 C
字号:
#include"Source.h"
#include<signal.h>#include<pthread.h>pthread_t repub,user_F,user_G,print;TPublisher *A,*B;
TBookShop *C,*D,*E;
TUser *F,*G;pthread_mutex_t BpCD,BpE,Flag;int flag;void sig_handle(int arg){            flag=1;   }
void *thread_repub(void *ptr)
{ 
 
  while(flag==0)
 {
  
 
  pthread_mutex_lock(&BpCD);
  pthread_mutex_lock(&BpE);
   RePublishBook(A);
   RePublishBook(B);
   
  pthread_mutex_unlock(&BpE);
  pthread_mutex_unlock(&BpCD);
  
  sleep(4);
  
 }
}void *thread_F(void *ptr)
{
  TBook *temp=NULL;
  
  while(flag==0)
 {
  
  pthread_mutex_lock(&BpE);
  temp=QueryBookShop(E,Science,NewPub);
	if(temp!=NULL)
	 if(UserBuyBook(E,temp,F,1)==2)
          {
             
               if(strcmp(temp->PublisherName,"A")==0)
               OrderFromPub(A,E,temp,E->typenum[Science]);
               else
               OrderFromPub(B,E,temp,E->typenum[Science]);
              
          }
         
   temp=NULL;
   sleep(1);
   temp=QueryBookShop(E,Gym,NewPub);
	if(temp!=NULL)
	 if(UserBuyBook(E,temp,F,1)==2)
          {
              
               if(strcmp(temp->PublisherName,"A")==0)
               OrderFromPub(A,E,temp,E->typenum[Gym]);
               else
               OrderFromPub(B,E,temp,E->typenum[Gym]);
               
          }
         
   temp=NULL;
   sleep(1);
   temp=QueryBookShop(E,Living,NewPub);
	if(temp!=NULL)
	 if(UserBuyBook(E,temp,F,1)==2)
          {
              
               if(strcmp(temp->PublisherName,"A")==0)
               OrderFromPub(A,E,temp,E->typenum[Living]);
               else
               OrderFromPub(B,E,temp,E->typenum[Living]);
             
          }
         
   temp=NULL;
  pthread_mutex_unlock(&BpE);
  sleep(3);
 }
}

void *thread_G(void *ptr)
{
   TBook *temp=NULL;
   int i;

   while(flag==0)
  {
   
    pthread_mutex_lock(&BpE);
    for( i=0; i<7; i++)
    {
     
      temp=QueryBookShop(E,i,NewPub);
	if(temp!=NULL)
	 if(UserBuyBook(E,temp,G,50)==2)
          {
             
               if(strcmp(temp->PublisherName,"A")==0)
               OrderFromPub(A,E,temp,E->typenum[i]);
               else
               OrderFromPub(B,E,temp,E->typenum[i]);
              
          }
         
      temp=NULL;
    }
    pthread_mutex_unlock(&BpE);
    sleep(5);
 }
}void *thread_print(void *ptr)
{
   
   while(flag==0)
   {  
    
   
    pthread_mutex_lock(&BpCD);
    pthread_mutex_lock(&BpE);
    
    
    ShowPub(A);
    ShowPub(B);
    ShowBookShop(C);
    ShowBookShop(D);
    ShowBookShop(E);
    ShowUser(F);
    ShowUser(G);

    pthread_mutex_unlock(&BpE);
    pthread_mutex_unlock(&BpCD);
    


       sleep(30); 
   } 
}
int main(int argc,char **argv)
{   
	pthread_t repub,user_F,user_G;        
	
	TBook *temp;        struct sigaction act;        flag=0;        act.sa_handler=sig_handle;        sigemptyset(&act.sa_mask);        act.sa_flags=0;        sigaction(SIGINT,&act,NULL);
    work=fopen("work.txt","a+");
    INFO=fopen("info.txt","w");
	if(work==NULL || INFO==NULL) 
	{
		printf("orderfrompub's work.txt open fail!\n");
		exit(0);
	}
	
	A=PublisherCreate("A");
       B=PublisherCreate("B");
    
	C=BookShopCreate("C");
        D=BookShopCreate("D");
	E=BookShopCreate("E");

	F=CreateUser("F");
	G=CreateUser("G");

	AddNewBook(A,"book1.txt");
	AddNewBook(B,"book2.txt");
    
	Register(A,C);
	Register(A,D);
	Register(A,E);
	Register(B,C);
	Register(B,D);
	Register(B,E);
	
        BuyNewBook(A,C);
	BuyNewBook(A,D);
	BuyNewBook(A,E);
	BuyNewBook(B,C);
	BuyNewBook(B,D);
	BuyNewBook(B,E);
  
   


    
              pthread_mutex_init(&BpCD,NULL);       pthread_mutex_init(&BpE,NULL);       pthread_mutex_init(&Flag,NULL);
       if(pthread_create(&repub,NULL,thread_repub,NULL) || pthread_create(&user_F,NULL,thread_F,NULL) || pthread_create(&user_G,NULL,thread_G,NULL) || pthread_create(&print,NULL,thread_print,NULL))       {           printf("create thread  error!\n");           exit(0);       }       pthread_join(repub,NULL);
       pthread_join(user_F,NULL);       pthread_join(user_G,NULL);	       pthread_join(print,NULL);       printf("5555555555555555555555\n");    fclose(work);
	fclose(INFO);     FreePublisher(A);
	FreePublisher(B);
	FreeBookShop(C);
    FreeBookShop(D);
	FreeBookShop(E);
	FreeUser(F);
	FreeUser(G);
	         
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -