【C++多線程系列】【七】實現經典的C/S架構

要求以下:線程

1.S端收到C端請求後,將C端請求加入到優先級隊列中,S端有專門的線程A來處理該隊列中的請求,該線程不阻塞,線程A從隊列中拿到請求後,會新起一個線程來執行該請求,C端的線程會阻塞,直到執行線程將結果返回。隊列

 

基於此,總體流程圖以下:變量

 

問題關鍵點:循環

1.請求線程須要阻塞,直到拿處處理結果。請求

2.處理隊列的線程不能阻塞,須要一直處理隊列中的請求。方法

3.執行線程被建立完成後,須要獨自處理請求,並將結果返回給請求線程。im

 

因此有兩種方法:通信

方法一:使用條件變量,來進行線程間的通訊。注意兩點:請求線程與執行線程須要在同一個條件變量上;須要在同一個mutex上加鎖。img

方法二:使用原子變量Done來進行兩個線程間的通訊,請求線程使用while循環來阻塞;while

相關文章
相關標籤/搜索