2013-07-22 49 views
0

我目前工作的一個項目,我希望能夠找到解決這個場景的技術:等待隊列多個分支

還有人在一個房間裏等着拿的很多測試之一。可以爲每個人分配多個測試。每次測試可以在給定的時間在一個或多個地點進行,但是一次只能有一個人在給定的地點參加測試。

將人們隨機分配到測試中並最終完成測試是相對簡單的,但是我可以使用什麼樣的系統來讓人們等待相對平等的時間呢?如果我只是隨機分配他們,那麼只需要參加其中一項測試的人就可以放在需要參加測試的人員後面。

我曾考慮過先分配測試數量較少的人,但是我還沒有測試過,似乎仍然是不公平的。爲了增加複雜性,我添加了一個功能,可以改變優先級。

要清楚,這不是一項家庭作業。這個項目還處於邏輯發展階段,所以我沒有真正開始編程來比較不同的技術。我想到的最接近的東西是創建一個有點像線程池的系統,但是我沒有找到任何能夠詳細描述線程池背後的技術的東西,看起來好像需要一點點的開銷,如果我只是直接使用線程池,仍然會遇到問題。我也研究過C#Queue類,但我沒有想過擴展其功能的方法。

任何人有任何想法或建議?

回答

1

C#(和大多數其他語言)有一個concurrent priority queue您可以使用。將測試者放在隊列中,並在房間空閒時將其移除(併爲其分配一個測試);如果考生有更多的考試需要考試,那就把它放回隊列。

平衡執行時間的一種方法是爲「測試者」分配隨機優先級,例如,

testTaker.serPriority(random.Next(CONSTANT * testTaker.numberOfRemainingTests)) 

然後每當完成測試後重置測試者的優先級。這將有利於爲測試者分配測試,以便進行更多的測試,而隨機元素將近似公平。 CONSTANT應該大於測試者的數量以確保足夠的隨機性。