一、思维导图
二、练习题1
有一个隧道,长1000m,有一辆高铁,每秒100米,有一辆快车,每秒50m 要求模拟这两列火车通过隧道的场景。
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
pthread_mutex_t m;
void Gao()
{
sleep(1);
pthread_mutex_lock(&m);
printf("高铁通过隧道1000m/100m's=10s\n");
pthread_mutex_unlock(&m);
}
void Kuai()
{
pthread_mutex_lock(&m);
printf("快车通过隧道1000m/50m's=20s\n");
pthread_mutex_unlock(&m);
}
void* Train(void* arg)
{
Kuai();
}
int main()
{
pthread_mutex_init(&m, NULL);
pthread_t id;
pthread_create(&id, 0, Train, 0);
pthread_detach(id);
Gao();
return 0;
}
二、练习题2
有一个隧道,长1000m,有一辆高铁,每秒100米,有一辆快车,每秒50m,有一辆慢车每秒25m 要求模拟这两列火车通过隧道的场景,但是要求高铁最先过隧道,快车其次,慢车最后。
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
pthread_mutex_t g;
pthread_mutex_t k;
pthread_mutex_t m;
void task_main()
{
while(1)
{
pthread_mutex_lock(&g);
printf("高铁通过隧道\n");
sleep(1);
pthread_mutex_unlock(&k);
}
}
void task1()
{
while(1)
{
pthread_mutex_lock(&k);
printf("快车通过隧道\n");
sleep(1);
pthread_mutex_unlock(&m);
}
}
void task2()
{
while(1)
{
pthread_mutex_lock(&m);
printf("慢车通过隧道\n");
sleep(1);
pthread_mutex_unlock(&g);
}
}
void* thread_main1(void* arg)
{
task1();
}
void* thread_main2(void* arg)
{
task2();
}
int main()
{
pthread_mutex_init(&g, NULL);
pthread_mutex_init(&k, NULL);
pthread_mutex_init(&m, NULL);
pthread_mutex_lock(&k);
pthread_mutex_lock(&m);
pthread_t id;
pthread_create(&id, 0, thread_main1, 0);
pthread_detach(id);
pthread_t id2;
pthread_create(&id2, 0, thread_main2, 0);
pthread_detach(id2);
task_main();
return 0;
}