<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Linux 提供的原子操作接口有幾個


    發現錯別字 11個月前 提問
    回答
    1
    瀏覽
    147
    請勿發布不友善或者負能量的內容。與人為善,比聰明更重要!
    回答數量: 1
    等保中級測評師 CICSA

    ** Linux提供的兩個原子操作接口:**

    • 原子整數操作:

      針對整數的原子操作只能對atomic_t類型的數據處理。這里沒有使用C語言的int類型,主要是因為:

      讓原子函數只接受atomic_t類型操作數,可以確保原子操作只與這種特殊類型數據一起使用。

      使用atomic_t類型確保編譯器不對相應的值進行訪問優化。 (原理為: 變量被volatile修飾了)

      使用atomic_t類型可以屏蔽不同體系結構上的數據類型的差異。盡管Linux支持的所有機器上的整型數據都是32位,但是使用atomic_t的代碼只能將該類型的數據當作24位來使用。這個限制完全是因為在SPARC體系結構上,原子操作的實現不同于其它體系結構:32位int類型的低8位嵌入了一個鎖,因為SPARC體系結構對原子操作缺乏指令級的支持,所以只能利用該鎖來避免對原子類型數據的并發訪問。

      原子整數操作最常見的用途就是實現計數器。原子整數操作列表在中定義。原子操作通常是內斂函數,往往通過內嵌匯編指令來實現。如果某個函數本來就是原子的,那么它往往會被定義成一個宏。

    • 原子位操作:

      原子位操作定義在文件中。令人感到奇怪的是位操作函數是對普通的內存地址進行操作的。原子位操作在多數情況下是對一個字節長的內存訪問,因而位號該位于0-31之間(在64位機器上是0-63之間),但是對位號的范圍沒有限制。

      操作系統可以確保,在同一時刻,只有一個CPU的一個進程訪問特定的某個字節,再加上單核中的原子性(基本數據類型的簡單操作),所以單字節內存的簡單操作是具有天生的多核原子性的。

    回答所涉及的環境:聯想天逸510S、Windows 10。

    11個月前 / 評論
    亚洲 欧美 自拍 唯美 另类