我實現了我的Ubuntu服務器的簡單的線程池機制(我的多客戶端匿名聊天程序),我需要讓我的工作線程睡眠,直到一個作業(在一個函數指針的形式和參數)需要執行。線程等待家長
我現在的系統正在走出窗口。我(工作者線程)向經理詢問工作是否可用,以及是否有5ms沒有睡眠。如果有,請將作業添加到工作隊列並運行該功能。可憐的週期浪費。
我想像要做的是做一個簡單的事件樣的系統。我正在考慮有一個互斥量向量(每個worker都有一個向量),並且在創建時將互斥量的句柄作爲參數傳入。然後在我的經理類(它保存並分發作業)中,每當創建一個線程時,都會鎖定該互斥鎖。當需要執行任務時,解鎖下一個互斥鎖,等待它被鎖定和解鎖,然後重新鎖定它。不過,我想知道是否有更好的方法來達到這個目的。
tldr;所以我的問題是這樣的。讓一個線程等待管理類工作的最有效,最有效和最安全的方法是什麼?輪詢我應該甚至考慮的技術(每次超過1000個客戶端),互斥鎖是否體面?還是有其他技術?
條件變量是一個互斥/信號量? – ultifinitus 2011-04-27 06:08:54
@ultifinitus:No.條件變量是線程代碼中最低級別的基元(以及互斥體)。您可以從互斥/條件變量中構建信號量。 – 2011-04-27 06:28:54
哈哈謝謝!我感謝幫助!我喜歡'我把這當做鍛鍊的一部分。我會告訴你最終產品是如何工作的。 – ultifinitus 2011-04-29 13:19:13