1:有一个隧道,全长5公里,有2列火车,全长200米, 火车A时速 100公里每小时 火车B时速 50公里每小时 现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行)
pthread_mutex_t mA;
pthread_mutex_t mB;
void* task1(void *arg)
{
while(1)
{
pthread_mutex_lock(&mB);
printf("train B is passing\n");
float t=(5+0.2)/50*60*60;
sleep(t);
pthread_mutex_unlock(&mA);
}
}
int main(int argc, const char *argv[])
{
pthread_t id1;
pthread_create(&id1,NULL,task1,NULL);
pthread_detach(id1);
pthread_mutex_init(&mA,NULL);
pthread_mutex_init(&mB,NULL);
pthread_mutex_lock(&mB);
while(1)
{
pthread_mutex_lock(&mA);
printf("train A is passing\n");
float t=(5+0.2)/100*60*60;
sleep(t);
pthread_mutex_unlock(&mB);
}
return 0;
}
2:有一个隧道,全长5公里,有3列火车,全长200米,
火车A时速 100公里每小时
火车B时速 50公里每小时
火车c时速 25公里每小时
现在要求 火车A先通过隧道,火车B再通过隧道,最后火车C通过隧道
火车是线程,隧道是临界资源
pthread_mutex_t mA;
pthread_mutex_t mB;
pthread_mutex_t mC;
void* train_B(void *arg)
{
while(1)
{
pthread_mutex_lock(&mB);
printf("train B is passing\n");
float t=(5+0.2)/50*60*60;
sleep(t);
pthread_mutex_unlock(&mC);
}
}
void* train_C(void* arg)
{
while(1)
{
pthread_mutex_lock(&mC);
printf("train C is passing\n");
float t=(5+0.2)/25*60*60;
sleep(t);
pthread_mutex_unlock(&mA);
}
}
int main(int argc, const char *argv[])
{
pthread_t id1;
pthread_t id2;
pthread_create(&id1,NULL,train_B,NULL);
pthread_create(&id2,NULL,train_C,NULL);
pthread_detach(id1);
pthread_detach(id2);
pthread_mutex_init(&mA,NULL);
pthread_mutex_init(&mB,NULL);
pthread_mutex_init(&mC,NULL);
pthread_mutex_lock(&mB);
pthread_mutex_lock(&mC);
while(1)
{
pthread_mutex_lock(&mA);
printf("train A is passing\n");
float t=(5+0.2)/100*60*60;
sleep(t);
pthread_mutex_unlock(&mB);
}
return 0;
}