簡體   English   中英

stdatomic(C11),關於_Atomic類型的三個問題

[英]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_storeatomic_loadatomic_compare_exchange_weak ),而不通過類型為工作_Atomic類型,我還是可以管理的競爭條件,沒有問題。 這是標准行為嗎? 它有缺點或導致任何錯誤嗎?

第一個問題:

C11 7.17.6p3

注意:原子整數類型的表示不必與它們相應的常規類型具有相同的大小。 它們應盡可能具有相同的大小,因為這樣可以減輕移植現有代碼所需的工作量。

第二個問題:

C11 6.7.2.4p3

[限制條件]

3原子類型說明符中的類型名稱不得引用數組類型,函數類型,原子類型或限定類型。

volatile int是合格的類型。 以約束部被違反,因此編譯器需要輸出一個診斷消息。 除此之外,這種構造的行為是不確定的。

第三個問題:

C11 7.17.1.p5

5在以下概要中:

  • A是指原子類型之一。

他們期望使用_Atomic類型。 您傳入了非原子變量,因此未定義行為。

暫無
暫無

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

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