데이터에서 작동하는 여러 개의 동시 작업이있는 시스템에서 최소한의 대기 시간이 포함되도록 작업을 주문하고 싶습니다. 시스템의 각 작업은 특정 자원 집합을 사용하며, 특정 순서로 작업이 발급됩니다 (이 순서는 계산하려는 것입니다). 필요한 모든 자원을 잠글 때까지 작업이 시작되지 않습니다. 작업은 순차적으로 발행되므로 두 번째 작업이 모든 잠금을 획득 할 때까지 세 번째 작업이 시작되지 않습니다.대기 작업을 최소화하기 위해 동시 작업을 주문하십시오.
Task 1, Resources [A, B]
Task 2, Resources [B, C]
Task 3, Resources [C, D]
Task 4, Resources [E]
Best Solution
Task 1, [A, B]
Task 3, [C, D] //No waiting is possibly required
Task 4, [E] //Put this before task 3, to maximise the distance between uses of the same resource (minimise chances of lock contention)
Task 2, [B, C] //Some waiting *might* be required here
사용중인 리소스 사이에 최대 간격이 있고 다시 사용되도록 최적의 순서를 계산하는 데 사용할 수있는 알고리즘은 무엇입니까?
Nb. 이것은 언어에 구애받지 않지만 C#의 구현에 대한 보너스 포인트
자세한 내용을 제공해야합니다. 작업이 얼마나 오래 실행되는지 알지 못하면 _minimum_ 대기 시간에 대한 명확한 정의가 없습니다. 예상 대기 시간을 최소화 하시겠습니까? 그런 다음 시간 j 이후에 잠금을 해제하는 작업의 확률을 정의해야합니다. –
죄송합니다. 모든 작업이 비슷한 실행 시간을 가진다고 가정 할 수 있습니다. 따라서 대기 시간을 줄이는 것은 리소스 및 후속 리소스 사용 – Martin