一、思维导图

二、练习题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;
}
 
 




















