2010-11-09 80 views
0

當我想跟蹤活動連接時,將它們保存到鏈接列表還是直接保存到某個索引將代表連接ID的數組中更好?我想,以防止可能的競爭狀態的問題,例如:跟蹤活動連接的數據結構

  • 號碼列表中的連接大
  • 有人開始尋找這是在列表的末尾
  • 同時,在連接搜索,連接被分離

回答

0

該結構應該有一個連接句柄(SOCKET),一個引用計數和一個標誌,表示應該關閉連接並儘快刪除該對象。無論容器是什麼,它都必須具有用於搜索/插入/刪除的同步機制(關鍵部分)以及GetReference/Release邏輯。如果引發結束標誌,GetReference函數應返回NULL。根據搜索條件,連接對象應該具有所有可以幫助它在容器中找到的值,您可能需要更多的GetReference。如果GetReference函數不存在於容器中,則其中一個GetReference函數可以創建新對象。

釋放函數應關閉連接,並在引發結束標誌並將引用計數降爲零時從容器中刪除該對象。然而版本一定不能關閉關鍵部分內的連接,因爲這可能是耗時的操作(取決於graceful shutdown and lingering option)。釋放應輸入CS,減少引用計數,如果爲零,則離開CS,關閉連接,再次輸入CS,並從容器中移除對象並將其刪除。因爲關閉標誌被提高,引用計數不會在兩個CS之間上升。