在之前的基礎上增加了條件變數,相比之前的等待時間減少,
處理速度更快
/*** @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 不是原子性操作,導致結果不是預期的結果。在回...