在網路程式設計中,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...