题目1
pthread_mutex_t mutex;
void* train2(void* arg);
void tunnel(int second, char train);
int main(int argc, const char *argv[])
{
pthread_mutex_init(&mutex,NULL);
pthread_t id;
if(pthread_create(&id,0,train2,0)!=0){
perror("pthread_create");
return 1;
}
pthread_detach(id);
while(1){
pthread_mutex_lock(&mutex);
tunnel(2,'A');
pthread_mutex_unlock(&mutex);
}
return 0;
}
void* train2(void* arg){
while(1){
pthread_mutex_lock(&mutex);
tunnel(4,'B');
pthread_mutex_unlock(&mutex);
}
}
void tunnel(int second, char train){
for(int i=0;i<=second;i++){
int j;
for(j=0;j<24;j++)printf("*");
putchar(10);
for(j=0;j<24/second*i;j++)printf(" ");
printf("%c\n",train);
for(j=0;j<24;j++)printf("*");
putchar(10);
sleep(1);
}
}
题目2
pthread_mutex_t mutex1;
pthread_mutex_t mutex2;
pthread_mutex_t mutex3;
void* train2(void* arg);
void* train3(void* arg);
void tunnel(int second,char train);
int main(int argc, const char *argv[])
{
pthread_mutex_init(&mutex1,0);
pthread_mutex_init(&mutex2,0);
pthread_mutex_init(&mutex3,0);
pthread_t id1;
pthread_t id2;
pthread_mutex_lock(&mutex2);
pthread_mutex_lock(&mutex3);
if(pthread_create(&id1,0,train2,0)!=0){
perror("pthread_create_1");
return 1;
}
if(pthread_create(&id2,0,train3,0)!=0){
perror("pthread_create_2");
return 2;
}
pthread_detach(id1);
pthread_detach(id2);
while(1){
pthread_mutex_lock(&mutex1);
tunnel(2,'A');
pthread_mutex_unlock(&mutex2);
}
return 0;
}
void tunnel(int second, char train){
for(int i=0;i<=second;i++){
int j;
for(j=0;j<24;j++)printf("*");
putchar(10);
for(j=0;j<24/second*i;j++)printf(" ");
printf("%c\n",train);
for(j=0;j<24;j++)printf("*");
putchar(10);
sleep(1);
}
}
void* train2(void* arg){
while(1){
pthread_mutex_lock(&mutex2);
tunnel(4,'B');
pthread_mutex_unlock(&mutex3);
}
}
void* train3(void* arg){
while(1){
pthread_mutex_lock(&mutex3);
tunnel(8,'C');
pthread_mutex_unlock(&mutex1);
}
}
![](https://img-blog.csdnimg.cn/direct/345824091b4c4dd4a3d333f876a65f50.png)