簡體   English   中英

是原子的 <T*> 永遠鎖定免費?

[英]Is atomic<T*> always lock free?

在我的MAC OS上, atomic<T*>是無鎖的。

#include <iostream>
#include <atomic>

int main() {
    std::cout << std::atomic<void*>().is_lock_free() << std::endl;
    return 0;
}

output: 1

我想知道atomic<T*>是否總是無鎖?

有參考介紹嗎?

該標准允許使用鎖實現任何原子類型(std :: atomic_flag除外)。 即使平台允許某些類型的無鎖原子,標准庫開發人員也可能沒有實現。

如果在使用鎖時需要以不同的方式實現某些內容,可以在編譯時使用ATOMIC_POINTER_LOCK_FREE宏來檢查。

不,假設任何特定平台的std::atomic實現總是無鎖是不安全的。

該標准指定了一些標記宏,包括ATOMIC_POINTER_LOCK_FREE ,它指示對於所討論的平台,指針永遠不會,有時或總是無鎖。

您還可以從std::atomic<T *>::is_always_lock_free獲取特定T的答案。 1

注1:給定的指針類型必須一致 ,因此實例方法std::atomic<T *>::is_lock_free()是多余的。

暫無
暫無

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

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