首先,互斥量這種執行緒相關的內容是平台相關的,我假設你用的是windows平台開發。
其次,說明一下我的開發環境,vs2008,控制台程式,空的工程。
最後給你貼**,分檔案來看。
===標頭檔案queuenode.h===
===你需要的節點資料可能不是整數,只要將typedef int queuedata這一句的int換成你想要的型別即可,但要注意,這個型別必須實現賦值操作符過載,相等比較操作符過載,以及複製建構函式===
#ifndef _queue_node_h_
#define _queue_node_h_
typedef int queuedata;
typedef struct node
queuenode;
#endif
#ifndef _queue_h_
#define _queue_h_
#include "queuenode.h"
#include class threadsafequeue
;#endif
===佇列函式實現檔案queue.cpp===
#include "queue.h"
#include threadsafequeue::threadsafequeue()
threadsafequeue::~threadsafequeue()
bool threadsafequeue::initqueue()
void threadsafequeue::enqueue(const queuedata& data)
ptemp->m_pnext = pnode;
releasemutex(m_hmutex);
}void threadsafequeue::dequeue()
releasemutex(m_hmutex);
}const queuenode* threadsafequeue::find(const queuedata& data) const
pnode = pnode->m_pnext;
} return pnode;
releasemutex(m_hmutex);
}void threadsafequeue::clear()
m_pqueuehead->m_pnext = 0;
releasemutex(m_hmutex);
}void threadsafequeue::print()
std::cout << std::endl;
releasemutex(m_hmutex);
}===測試**檔案main.cpp,包含了測試用可執行程式,兩個操作queue的執行緒,需要說明的是,我本來打算用waitmultipleobjects函式來等待兩個執行緒都結束,但是沒搞清楚是什麼問題沒有卡住,不打算繼續糾纏它了,所以讓主線程sleep了5秒鐘===
#include "queue.h"
#include dword winapi handlequeue(void* pparam);
dword winapi handlequeue2(void* pparam);
int main()
; dword threadid = 0;
hthread[0] = createthread(null, 0, handlequeue, (void*)(&queue), null, &threadid);
hthread[0] = createthread(null, 0, handlequeue2, (void*)(&queue), null, &threadid);
//waitformultipleobjects(2, hthread, true, infinite);
sleep(5000);
queue.print();
queue.clear();
return 0;
}dword winapi handlequeue(void* pparam)
for (int i = 0; i < 50; i++)
return 0;
}dword winapi handlequeue2(void* pparam)
for (int i = 0; i < 50; i++)
return 0;
}
自己也寫了乙個,時間倉促,還未完成,是用雙向鍊錶做的
#include#includeusing namespace std;
templatestruct node
;templateclass queue
;templatequeue::queue():nodecount(0)
templatevoid queue::enqueue(const node& node)
int main()
執行緒安全的佇列 阻塞佇列
queue佇列 先進先出,兩個執行緒同時操作同乙個佇列,執行緒是不安全的 blockingqueue阻塞佇列 先進先出,執行緒是安全,阻塞佇列中維護了鎖,用於進出佇列。一般阻塞佇列用於生產者和消費者模式。arrayblockingqueue 1 基於陣列的阻塞佇列。2 維護的是定長陣列,初始化的時候...
常用執行緒安全的佇列
參考 執行緒安全佇列可以分為,阻塞執行緒安全佇列和非阻塞執行緒安全佇列 阻塞執行緒安全佇列常用為arrayblockingqueue linkedblockingqueue 非阻塞執行緒安全佇列一般為concurrentlinkedqueue 將不需要序列化的屬性前新增關鍵字transient,序列...
訊息佇列 執行緒安全
為什麼在互斥量的基礎上還需要加條件變數?需要注意的是 include int pthread cond wait pthread cond t cv,pthread mutex t mutex 返回值 函式成功返回0 任何其他返回值都表示錯誤 函式將解鎖mutex引數指向的互斥鎖,並使當前執行緒阻塞...