[英]stdatomic (C11), three questions about _Atomic types
我發現cppreference
_Atomic ( type-name )
(自C11起)
用作類型說明符; 這指定了一種新的原子類型
_Atomic type-name
(2)(自C11起)
用作類型限定符; 這指定類型名稱的原子版本。 盡管與其他限定符不同,type-name的原子版本可能具有不同的大小,對齊方式和對象表示形式,但它可以與const,volatile和strict混合使用。
那么使用_Atomic(int)
而不是_Atomic int
確保它與int
大小相同嗎?
在_Atomic
Ex內部使用限定詞:
_Atomic(volatile int)
引發錯誤,但使用方法如下:
_Atomic(volatile _Atomic(int)*)
才不是; 這是標准行為嗎?
我注意到原子功能(例如: atomic_store
, atomic_load
, atomic_compare_exchange_weak
),而不通過類型為工作_Atomic
類型,我還是可以管理的競爭條件,沒有問題。 這是標准行為嗎? 它有缺點或導致任何錯誤嗎?
第一個問題:
注意:原子整數類型的表示不必與它們相應的常規類型具有相同的大小。 它們應盡可能具有相同的大小,因為這樣可以減輕移植現有代碼所需的工作量。
第二個問題:
[限制條件]
3原子類型說明符中的類型名稱不得引用數組類型,函數類型,原子類型或限定類型。
volatile int
是合格的類型。 甲應以約束部被違反,因此編譯器需要輸出一個診斷消息。 除此之外,這種構造的行為是不確定的。
第三個問題:
5在以下概要中:
A
是指原子類型之一。
他們期望使用_Atomic
類型。 您傳入了非原子變量,因此未定義行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.