簡體   English   中英

C ++:如果std :: atomic_flag是唯一的無鎖原子類型,那么如何在C ++中實現無鎖數據結構?

[英]C++: How can lock-free data structures be implemented in C++ if std::atomic_flag is the only lock-free atomic type?

實現無鎖數據結構的典型方法是使用原子CAS操作,例如std::compare_exchange_strongstd::compare_exchange_weak 這種技術的用法示例可以在Antony Williams的“C ++ Concurrency in Action”中看到,其中實現了無鎖堆棧。 堆棧實現為帶有std::atomic<node*>頭指針的鏈表。 在推送和彈出期間,對此指針執行CAS操作。 但是C ++標准保證只有std::atomic_flag是無鎖的,其他原子類型,包括std::atomic<T*> ,可能不是無鎖的。

1)我是否理解正確如果std::atomic<T*>不是無鎖的( std::atomic::is_lock_free()返回false),則基於對std::atomic<T*> CAS操作的數據結構std::atomic<T*>不鎖定?

2)如果是,那么,如果std::atomic_flag是某些編譯器唯一的無鎖原子類型,那么在C ++上實現無鎖數據結構的替代方法是什么?

編譯器不具有原子類型的無鎖實現的唯一可能原因是處理器沒有原子操作。 我不知道現代處理器就是這種情況。

如果處理器不支持原子操作,您可能別無選擇,只能使用互斥鎖,信號量或類似的同步原語

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM