1:有一个隧道,全长5公里,有2列火车,全长200米,
火车A时速 100公里每小时
火车B时速 50公里每小时
现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
double length=0.00;
double atrain=27.8;
double btrain=13.9;
pthread_mutex_t mutex;
void *run(void * arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
length=0;
printf("B火车进入隧道\n");
/*while(length<5000.00)
{
length+=btrain;
if(length>5000.00)
{
break;
}
printf("B火车行走了%.2lf米的隧道\n",length);
//sleep(1);
}*/
printf("B火车行走了5000米的隧道\n");
printf("B火车走到隧道末尾了\n");
sleep(1);
length=0;
pthread_mutex_unlock(&mutex);
}
}
int main(int argc, const char *argv[])
{
pthread_t id;
pthread_mutex_init(&mutex,NULL);
if(pthread_create(&id,0,run,0)!=0)
{
perror("pthread_create:");
return 1;
}
pthread_detach(id);
while(1)
{
pthread_mutex_lock(&mutex);
printf("A火车进入隧道\n");
length=0;
/* while(length<5000.00)
{
length+=atrain;
if(length>5000.00)
{
break;
}
printf("A火车行走了%.2lf米的隧道\n",length);
//sleep(1);
}*/
printf("A火车行走了5000米的隧道\n");
printf("A火车走到隧道末尾了\n");
sleep(1);
length=0;
pthread_mutex_unlock(&mutex);
}
return 0;
}
运行结果为:
有一个隧道,全长5公里,有3列火车,全长200米,
火车A时速 100公里每小时
火车B时速 50公里每小时
火车c时速 25公里每小时
现在要求 火车A先通过隧道,火车B再通过隧道,最后火车C通过隧道
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
pthread_mutex_t mutex;
pthread_mutex_t mutex1;
pthread_mutex_t mutex2;
double length=0.00;
double atrain=27.8;
double btrain=13.89;
double ctrain=8.33;
void *run(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex1);
length=0.00;
printf("B火车进入隧道\n");
/*while(length<5000.00)
{
length+=btrain;
if(length>=5000.00)
{
break;
}
printf("B火车走了%.2lf米\n",length);
}*/
printf("B火车走了5000米\n");
printf("B火车已经走出隧道\n");
sleep(5);
pthread_mutex_unlock(&mutex2);
}
}
void *run1(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex2);
length=0.00;
printf("C火车进入隧道\n");
/*while(length<5000.00)
{
length+=ctrain;
if(length>=5000.00)
{
break;
}
printf("C火车走了%.2lf米\n",length);
}*/
printf("C火车走了5000米\n");
printf("C火车已经走出隧道\n");
length=0.00;
sleep(5);
pthread_mutex_unlock(&mutex);
}
}
int main(int argc, const char *argv[])
{
pthread_t id1;
pthread_t id2;
pthread_mutex_init(&mutex,0);
pthread_mutex_init(&mutex1,0);
pthread_mutex_init(&mutex2,0);
pthread_mutex_lock(&mutex1);
pthread_mutex_lock(&mutex2);
if(pthread_create(&id1,0,run,0)!=0)
{
perror("id1_pthread_create:");
return 1;
}
if(pthread_create(&id2,0,run1,0)!=0)
{
perror("id2_pthread_create:");
return 1;
}
while(1)
{
pthread_mutex_lock(&mutex);
length=0.00;
printf("A火车进入隧道\n");
/*while(length<5000.00)
{
length+=atrain;
if(length>=5000.00)
{
break;
}
printf("A火车走了%.2lf米\n",length);
}
length=0.00;*/
printf("A火车走了5000米\n");
printf("A火车已经走出隧道\n");
sleep(5);
pthread_mutex_unlock(&mutex1);
}
return 0;
}