1:思维导图
2:有一个隧道,长1000m,有一辆高铁,每秒100米,有一辆快车,每秒50m 要求模拟这两列火车通过隧道的场景
pthread_mutex_t mutex;
void* pthread_main(void* arg)
{
pthread_mutex_lock(&mutex);
printf("快车正在通过隧道\n");
for(int i = 0;i<1000/100;i++)
{
printf("-");
fflush(stdout);
sleep(1);
}
putchar(10);
pthread_mutex_unlock(&mutex);
}
int main(int argc, const char *argv[])
{
pthread_t id;
pthread_mutex_init(&mutex,NULL);
pthread_create(&id,0,pthread_main,NULL);
pthread_mutex_lock(&mutex);
printf("火车正在通过隧道\n");
for(int i = 0;i<1000/50;i++)
{
printf("-");
fflush(stdout);
sleep(1);
}
putchar(10);
pthread_mutex_unlock(&mutex);
pthread_join(id,NULL);
return 0;
}
3:有一个隧道,长1000m,有一辆高铁,每秒100米,有一辆快车,每秒50m,有一辆慢车每秒25m 要求模拟这两列火车通过隧道的场景,但是要求高铁最先过隧道,快车其次,慢车最后
pthread_mutex_t m1,m2,m3;
void* pthread_main1(void* arg)
{
pthread_mutex_lock(&m2);
printf("快车运行\n");
for(int i=0;i<1000/50;i++)
{
printf("-");
fflush(stdout);
sleep(1);
}
putchar(10);
pthread_mutex_unlock(&m3);
}
void* pthread_main2(void* arg)
{
pthread_mutex_lock(&m3);
printf("慢车运行\n");
for(int i=0; i<1000/25;i++)
{
printf("-");
fflush(stdout);
sleep(1);
}
putchar(10);
pthread_mutex_unlock(&m1);
}
int main(int argc, const char *argv[])
{
pthread_t id1,id2;
pthread_mutex_init(&m1,NULL);
pthread_mutex_init(&m2,NULL);
pthread_mutex_init(&m3,NULL);
pthread_mutex_lock(&m2);
pthread_mutex_lock(&m3);
pthread_create(&id1,0,pthread_main1,NULL);
pthread_create(&id2,0,pthread_main2,NULL);
pthread_mutex_lock(&m1);
printf("高铁运行\n");
for(int i=0;i<1000/100;i++)
{
printf("-");
fflush(stdout);
sleep(1);
}
putchar(10);
pthread_mutex_unlock(&m2);
pthread_join(id1,NULL);
pthread_join(id2,NULL);
pthread_mutex_destroy(&m1);
pthread_mutex_destroy(&m2);
pthread_mutex_destroy(&m3);
return 0;
}
4:使用条件变量实现一个生产者消费者模型(pv)模型 生产者线程:每秒生成2个苹果 消费者线程:没3秒消费 5~9个苹果 要求消费者在消费之前一定要有足够的苹果给消费
pthread_mutex_t mutex;
int numper,numcer;
pthread_cond_t cond;
void producer()
{
while(1)
{
pthread_mutex_lock(&mutex);
while(numper<numcer)
{
numper += 1;
usleep(500000);
printf("*");
fflush(stdout);
}
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
void consumer()
{
while(1)
{
pthread_mutex_lock(&mutex);
sleep(3);
numcer = rand()%5+5;
printf("老板,我要%d个苹果\n",numcer);
printf("自动回复:老板正在生产中!\n");
printf("努力生产中:");
fflush(stdout);
pthread_cond_wait(&cond,&mutex);
printf("生产完毕\n");
printf("消费成功 老板原有%d个苹果,现剩%d个苹果\n",numper,numper-numcer);
printf("-------------------------------------\n");
putchar(10);
numper = numper-numcer;
pthread_mutex_unlock(&mutex);
}
}
void* pthread_main(void* arg)
{
consumer();
}
int main(int argc, const char *argv[])
{
pthread_t id;
printf("程序加载中\n");
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond,NULL);
srand(time(0));
pthread_create(&id,0,pthread_main,NULL);
pthread_detach(id);
producer();
return 0;
}