【发布时间】:2016-06-14 14:48:21
【问题描述】:
我有这个问题我正在努力解决,
我有一台机器,任务一个接一个地进入机器。
每个任务都有一个任务 ID、起始编号和它请求的单元数。
对于每个任务,我需要检查任务的范围[开始编号,开始编号+请求单位]是否与之前的任务范围重叠,如果重叠,则不会执行。
任务Id有32个,机器不能同时持有相同的任务Id(如果任务Id 2在机器中,必须在再次进入机器前执行,可能参数不同)
基本思想是保存一个控制块,其中包含机器中所有任务的范围(最多 32 个),并为每个新任务扫描此结构,但这并不是性能的最佳选择。
有什么想法吗?
这是取自真实世界的产品开发,我简化了这个模型。另外我需要用 C 编写解决方案,所以我不能有任何复杂的数学理论:)
【问题讨论】:
-
你对机器的定义不够好,比如数字的范围,你没有说当一个新的任务无法处理时会发生什么。是否所有新请求都在此时被搁置,或者是否应该将它们放入搁置队列中,同时处理其他新请求?这可能非常复杂,因为新请求可能会不断地阻塞等待队列中的一个。例如,如果正在运行的任务正在处理单元 1-4,并且单元 3-6 的新任务排队,然后新任务到达处理单元 5-8,这可能是允许的,但任务保留在队列中仍然被阻止。