📄 main.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 + -