![](/img/trans.png)
[英]How to use std::atomic<T>::is_always_lock_free for SFINAE?
[英]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.