造輪子之執行緒安全佇列的封裝

2021-09-26 19:45:05 字數 1232 閱讀 5897

c++中雖然有std::queue、std::deque這些佇列容器,但是不是執行緒安全的,因此我們需要封裝乙個執行緒安全的執行緒佇列。

定義

template >

class yr_thread_queue : protected yr_threadlock

public:

void push_front(const t& t);

void push_front(const queue_type& qt);

void push_back(const t& t);

void push_back(const queue_type& qt);

//從頭部獲取資料,沒有資料則等待

//millsecond為阻塞等待時間,0為不阻塞,-1為永久等待

bool pop_front(t& t, int millsecond = 0);

size_t size() const

void clear()

bool empty()

private:

//佇列

queue_type _queue;

//佇列長度

size_t _size;

};

實現

push_back

template void yr_thread_queue::push_back(const t& t)

templatevoid yr_thread_queue::push_back(const queue_type& qt)

}

push_front
templatevoid yr_threadqueue::push_front(const t& t)

templatevoid yr_thread_queue::push_front(const queue_type& qt)

}

獲取資料
templatebool yr_thread_queue::pop_front(t& t, int millsecond)

}if(_queue.empty())

return false;

t= _queue.front();

_queue.pop_front();

assert(_size > 0);

--_size();

return true;

}

造輪子之執行緒鎖監控類的封裝

互斥鎖乙個明顯的缺點是它只有兩種狀態 鎖定和非鎖定。而條件變數通過允許執行緒阻塞和等待另乙個執行緒傳送訊號的方法彌補了互斥鎖的不足,它常和互斥鎖一起配合使用。使用時,條件變數被用來阻塞乙個執行緒,當條件不滿足時,執行緒往往解開相應的互斥鎖並等待條件發生變化。一旦其他的某個執行緒改變了條件變數,他將通...

造輪子之執行緒控制類的封裝

執行緒常用方法int pthread join pthread t thread,void retval int pthread detach pthread t thread pthread t pthread self void int pthread create pthread t thre...

造輪子之常用函式的封裝

常用函式的封裝 時間操作常用函式 幫助類定義 字串操作封裝class yr common 實現string yr common trim const string sstr,const string s,bool bchar string yr common trimleft const strin...