執行緒安全的佇列寫法

2021-06-09 22:40:30 字數 2434 閱讀 1388

首先,互斥量這種執行緒相關的內容是平台相關的,我假設你用的是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引數指向的互斥鎖,並使當前執行緒阻塞...