2015-11-02 96 views
0

我正在C中編寫代碼,其中有多個寫入高優先級隊列或低優先級隊列和單個工人(或消費者)從高優先級隊列和低優先級隊列讀取的線程。需要關於多線程線程,單個工作線程模型的建議

我有一個使用pthread mutex的線程同步機制。

我在寫這段代碼的時候有一種懷疑,即我是否應該爲高優先級隊列和低優先級隊列分別設置一個鎖? 或我應該有一個高低優先級隊列的公共鎖。

+0

發佈您的代碼。有辦法做到這一點,沒有任何鎖。 –

+0

現在它的方式太廣泛了。發佈具體信息,最好是代碼,如果你能以簡潔明白的形式得到它。 – MicroVirus

+0

請找到僞代碼,因爲我無法粘貼確切的代碼。 –

回答

-1

我在編寫這段代碼的時候有一個疑問,即我是否應該爲高優先級隊列和低優先級隊列分別設置一個鎖?或者我應該爲高優先級和低優先級隊列設置一個通用鎖。

兩個鎖將允許同時寫入高優先級隊列和低優先級隊列。一個鎖不會。此外,單一鎖定將阻止寫入隊列,同時從隊列讀取項目。因此,由於鎖爭用較少,因此兩個鎖將執行比寫入更好的鎖。對於隊列讀取的性能,一個鎖實現比兩個更容易,但執行類似。

-1

我會建議只使用一個鎖,因爲它使實現更簡單,並且由於更簡單的實現可能會導致更好的性能。使用單鎖,讀卡器實現僅僅是:

  1. 獲取鎖。

  2. 檢查高優先級隊列,如果有工作,把工作從隊列中,解鎖,做工作,並轉到步驟1.

  3. 檢查低優先級隊列,如果有工作,取出隊列中的工作,解鎖,完成工作,然後轉到步驟1.

  4. 在單個條件變量上阻塞。

  5. 轉到步驟1