问答题
【同步问题解决方案-①】 某应用系统为了提高下载速度,采用了线程池的方案:主线程负责从用户处接收下载任务。另外预先生成五个专门负责下载任务的下载线程,每个下载线程负责一个下载任务。下载任务列表用链表表示,其中每个节点表示一个下载任务。当没有下载任务时,负责下载的线程处于阻塞状态;当有新下载任务时,负责下载的某个线程被唤醒,该线程从下载任务列表中获取一个任务,开始下载;下载完成后,如果任务列表中没有其它下载任务,则阻塞。如果有,继续获取一个任务开始下载。主线程的伪代码如下: repeat 从用户处获取一个新任务; 把新任务插入到下载任务列表; until false; 使用信号量机制保证各线程之间正确的同步与互斥关系的解决方案如下: 设置一个用于实现任务列表互斥的信号量mutex,初值设为(① ); 另外设置一个表示下载任务个数的信号量tasks,初值设为(② )。 主线程的伪代码: repeat 从用户处获取一个新任务; ③( ) 把新任务插入到下载任务列表; ④( ) ⑤( ) until false; 下载线程的伪代码: repeat ⑥( ) ⑦( ) 从下载任务列表中获取一个任务; ⑧( ) 下载; until false; ①处应填入( )
答案:
在这个同步问题解决方案中,我们需要确保对下载任务列表的访问是互斥的,即在任何时刻只有一个线程可以修改任务列表。因此,我们...