查找多个区域的重叠范围

时间:2016-06-14 14:48:22

标签: c real-time

我有这个问题,我正在努力,

我有一台机器,任务一个接一个地进入机器。

每个任务都有一个任务ID,起始编号和请求的单位数。

对于每个任务,我需要检查任务的范围[起始编号,起始编号+请求单位]是否与之前的任务范围重叠,如果是,则不会执行。

有32个任务Id,机器不能同时保持相同的任务ID(如果任务Id 2在机器中,则必须在再次进入机器之前执行,可能有不同的参数)

基本思想是保存一个控制块,其中包含机器中所有任务的范围(最多32个),并为每个新任务扫描此结构,但不是最佳性能。

任何想法的人?

这是从现实世界的产品开发中获取的,我简化了这个模型的到期。另外,我需要用C语言编写解决方案,这样我才能有任何复杂的数学理论:)

1 个答案:

答案 0 :(得分:0)

创建任务控制块结构(TCB_t)以保存有关任务的参数和信息。创建一个TCB_t * currentTasks [32] = {0}的数组,并将指针初始化为null。在你的addTask(...)例程中检查currentTasks [newTaskID] == NULL以及它是否分配了一个新的TCB_t并在那里分配它。您可以从currentTasks列表中处理任务,在完成后将其释放并将其设置为NULL。由于只有32个任务,您可以使用直接散列函数将TCB_t直接映射到currentTasks数组中的条目。 您还需要保留单独的区域列表,您可以将每个区域插入到已排序的链接列表中,以便更容易确定要添加的任务是否与其他任务重叠。