解析:这是一个典型的生产者消费者问题,可以使用信号量(Semaphore)来解决。生产者进程表示学生进入教室自习,消费者进程表示学生离开教室。当教室内人数少于30名时,生产者进程可以继续生产(即学生进入教室),否则消费者进程需要等待。 代码如下: ```python import threading import time # 定义信号量,初始值为30 sem = threading.Semaphore(30) def student_enter(): print("学生进入教室") sem.acquire() print("学生开始自习") time.sleep(5) # 假设学生自习时间为5秒 print("学生离开教室") sem.release() # 创建10个学生进程 for i in range(10): t = threading.Thread(target=student_enter) t.start() ``` 在这个例子中,我们创建了10个学生进程,每个进程都会尝试进入教室自习。由于信号量的初始值为30,所以最多只能有30个学生同时进入教室。当一个学生进入教室后,信号量的值会减1,其他学生需要等待直到信号量的值大于等于0。