2013-08-04 71 views
0

這是用VC++編寫的Windows服務器應用程序。我將使用線程池來處理到達服務器的各種請求對象。顯然,當一個線程正在處理特定請求並將其響應寫入套接字時,其他線程必須等待直到完成。我擔心這可能不是使用線程池的有效方法。同步對象和線程池

因此,我的問題是: 如果線程池中的線程正在等待線程同步對象被釋放,那麼使用線程池將不是有效的方法。有什麼辦法可以避免這種情況? (可能,事先知道對象在分配線程之前是否空閒)

回答

1

您可能只有一個線程將事情寫入套接字。其他線程將其數據放入隊列中,輸出線程從隊列中讀取數據並將數據寫入套接字。

當然,假設線程不需要等待來自套接字的響應才能繼續。

此外,它實際上取決於您希望線程等待套接字的頻率和時間。如果它偶爾發生,那麼沒有問題。線程將以最大速率進行處理,很少有線程需要等待另一個線程在發送之前完成發送。但是,如果線程花費了很多時間等待套接字,那麼你可能想要找到另一種方法來做事。帶有處理套接字的專用線程的輸出隊列工作得很好,並且非常容易設置。