2010-10-29 39 views
0
T BlockingQueue<T>::pop() { 
     pthread_mutex_lock(&lock); 
     if (list.empty()) { 
      pthread_cond_wait(&cond) ; 
     } 
     T temp = list.front(); 
     list.pop_front(); 
     pthread_mutex_unlock(&lock); 
     return temp; 
} 

以上是基於基礎鏈接列表和pthreads的模板化併發阻塞隊列定義的彈出操作。我的問題:我們可以通過哪些方式進一步優化此代碼?優化阻塞隊列實現的建議

+3

題外話,但你應該把鎖/解鎖包裝到一個類中。查閱SBRM/RAII。在主題上,看起來像進一步的改進只能通過一個無鎖隊列找到。 – GManNickG 2010-10-29 14:38:27

+0

@GMan - 當鎖被鏈接到條件變量時,RAII隱喻是否仍然有效?只是好奇... – 2010-10-29 14:41:37

+0

@GMan - 不用擔心,在這裏找到我的答案:http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html – 2010-10-29 14:43:48

回答

2

併發處理看起來很小。您的基礎容器是進行性能調整的最佳人選。這真的是一個鏈表嗎? deque會更好,如果你只是做FIFO操作。

編輯:另請參閱安東尼威廉姆斯樣本代碼(誰寫的當前Boost.Thread)here,提示和詳細的討論。

+0

+1爲非常有用的鏈接。 – 2010-10-29 14:55:57

0

在您當前的解決方案中,您嘗試通過進一步優化實現的具體問題是什麼?