安全執行緒佇列(二)

2021-08-04 15:40:26 字數 1139 閱讀 2521

在之前的基礎上增加了條件變數,相比之前的等待時間減少,

處理速度更快

/*** @brief cthreadsafequeue 基於鎖和條件變數的執行緒安全棧

* @brief 相對來說比上面設計上不需要過多的加鎖等待,速度要更快

*/template

class ccondsafequeue : public cthreadsafequeue

/*** @brief 複製建構函式

*/ccondsafequeue(const ccondsafequeue& other);

/*** @brief push 入佇列加鎖保護

*/virtual void push(t new_value);

/*** @brief 出佇列加鎖保護, 返回計數指標防止洩露

*/virtual void pop(t& value); // 2

/*** @brief 出佇列加鎖保護, 返回引用,返回方式與上述有所不同

*/virtual std::shared_ptrpop(); // 3

/*** @brief 佇列是否為空

*/virtual bool empty();

};template

ccondsafequeue::ccondsafequeue(const ccondsafequeue& other)

template

void ccondsafequeue::push(t new_value)

template

void ccondsafequeue::pop(t& value) // 2

);value = std::move(data_queue.front());

data_queue.pop();

}template

std::shared_ptrccondsafequeue::pop() // 3

); // 4

std::shared_ptrres(

std::make_shared(std::move(data_queue.front())));

data_queue.pop();

return res;

}template

bool ccondsafequeue::empty()

執行緒安全 執行緒不安全

執行緒安全是針對多執行緒來講的 如果所使用的公用變數在多執行緒下沒有被保護機制時,變數結果會和理論值不一致,這就是執行緒不安全 相反公用變數在保護機制下工作,就不會出現 隨機 變化,這時叫執行緒安全。執行緒安全 在多執行緒中使用時,不用自己做同步處理 執行緒不安全 在多執行緒中使用時,必須做執行緒同...

如何保證執行緒安全(執行緒同步)

基於衝突檢測的樂觀併發策略,通俗的說,就是先進行操作,如果沒有其他執行緒爭用共享資料,那操作就成功了。cas操作 compare and swap cas指令需要3個運算元,分別是記憶體位置v 舊的預期值a和新值b。cas指令執行時,當且僅當v符合舊的預期值a時,處理器用新值b更新v的值,否則它就不...

執行緒安全 執行緒安全的注意事項

當在多執行緒的環境下,多個執行緒去訪問共享的快取或者物件時,同時操作會對結果造成不用程度的改變,尤其是在操作上不具備原子性的操作上時會發生這種情況,例如我們之前在 執行緒安全 三類執行緒安全問題章節說到的i 問題,他其實就屬於一種對共享變數訪問時,由於i 不是原子性操作,導致結果不是預期的結果。在回...