C 多執行緒程式設計學習三 FIFO佇列設計

2021-05-24 09:25:31 字數 1158 閱讀 2667

在網路程式設計中,fifo佇列是經常使用到的乙個資料緩衝機制,同時這也是乙個生產者與消費者問題,在設計過程中要注意以下幾點。

佇列大小設計要科學,對於服務的強度而言,有乙個最優化長度,要通過測試去發掘。

資料競爭保護,通過設定條件互斥量,對涉及佇列的操作進行保護。

事件通知策略,兩個執行緒,乙個讀,乙個寫,每寫乙個資料到佇列中就要進行「事件通知」,而讀訊息每     次讀訊息前都要檢測事件是否處在訊號通知狀態,若不處在訊號通知狀態則阻塞,每次讀完資料後,檢測佇列是否為空,如為空則設定事件為非訊號通知狀態。

下面我將給出源**,win32 c++撰寫。

#include

#include

#include

#include

#define  bufsiz 50

using namespace std;

unsigned _stdcall threadwrite(void *x);

unsigned _stdcall threadread(void *x);

queuebuffer;

handle hbufferevent;

handle hbuffermutex;

void main()

unsigned _stdcall threadwrite(void *x)

buffer.push(item);   

releasemutex(hbuffermutex);

setevent(hbufferevent);

}else

item++;

if (item == 100)

}cout << "threadwrite returned!" << endl;

return 0;

}unsigned _stdcall threadread(void *x)

releasemutex(hbuffermutex);   }}

cout << "threadread returned!" << endl;

return 0;

}主要是注意事件通知與資料保護的合作性,這是個很簡單的例子,但有助於理解mutex和event的使用方法。

C 學習 多執行緒程式設計 多執行緒基礎

c 內建了對多執行緒程式設計的支援功能,所以相對於其他語言在多執行緒方面的問題,c 這裡就已經最小化或者不復存在。在.net framework 4.0中,c 中新增了兩個與多執行緒應用程式相關的重要功能 tpl 任務執行並行庫 和plinq 並行linq 兩者都提供對並行程式設計的支援,都可以利用...

C 多執行緒框架(三) 訊息佇列

原帖 首先,之前,多執行緒一些基本的東西,包括執行緒建立,互斥鎖,訊號量,我們都已經封裝,下面來看看訊息佇列 我們盡量少用系統自帶的訊息佇列 比如linux的sys msgqueue 那樣移植性不是很強,我們希望的訊息佇列,在訊息打包和提取都是用的標準的c 資料結構,當然,你也可以用鍊錶或者是fif...

多執行緒程式設計 三

放入資料 獲取資料 arrayblockingqueu 和 linkedblockingqueue arrayblockingqueu 是用陣列實現的有界阻塞佇列,並按照先進先出 fifo 的原則對元素進行排序。第乙個引數是容量 第二個引數是是否要保證執行緒的公平地訪問佇列 預設是false arr...