在最近的面试时,考察多线程编程时,除了经典的生产者-消费者,图书馆借书等问题,还遇到了以下几个考察多线程编程的经典问题,希望有时间能用C++/Python代码实现.
理发师问题:
一个理发店由一个有几张椅子的等待室和一个放有一张理发椅的理发室组成。
1.若没有要理发的顾客,则理发师去睡觉;
2.若一顾客进入理发店,理发师正在为别人理发,且等待室有空椅子,则该顾客就找张椅子按顺序坐下;
3.若一顾客进入理发店,理发师在睡觉,则叫醒理发师为该顾客理发;
4.若一顾客进入理发店且所有椅子都被占用了,则该顾客就离开。
乘客做公交车问题
司机:开车,停车
售票员:开门,关门
乘客:上车,下车
司机到站停车,然后售票员打开车门,乘客上下车,售票员关门。然后司机继续开车。请使用多线程实现三种的同步和互斥,模拟现实世界乘客乘坐公交车的过程。
考试问题
1个主考官,n个学生
考官和学生陆续进入教室(没有先后之分)。等待所有学生进入教室后,考官开始发考卷
考官把考卷发给所有学生后,学生才开始答题,学生可以提前交卷,交完卷后即可离开教室。
老师等所有学生交完卷后才能离开教室。
考试问题2
1个主考官,n个学生(带有时间戳)
考官和学生陆续进入教室(没有先后之分)。考试时间到后,不允许有学生再进入教室,假设考官不会迟到。
考官开始发考卷,考官把考卷发给所有学生后,答题时间开始后,才允许学生答题,学生可以提前交卷,交完卷后即可离开教室。
考试结束时间到后,老师收取所有考卷,然后离开教室。