簡體   English   中英

Linux中的atomic_t

[英]atomic_t in Linux

我正在研究Robert Love的Linux內核開發Linux內核。

如您所知,本書使用舊版Linux。 它是2.6版本

atomic_t有“volatile int counter”。 但是新Linux版本的atomic_t的“int counter”並不易變。 為什么這種揮發性已經消失了?

因為volatile變量不是原子變量。 使用volatile的唯一要點是防止可能的編譯器優化,這與防止不需要的並發訪問不同。

在這方面, volatile的使用幾乎從不正確。

您可以在原子和位掩碼操作的語義和行為中閱讀更多相關信息。

引用其中的一小部分:

*警告:atomic_read()和atomic_set()不要暗示障礙! *

某些體系結構可能會選擇使用volatile關鍵字,障礙或內聯匯編來保證atomic_read()和atomic_set()的某種程度的即時性。 這不是一致的保證,並且可能在將來發生變化,因此atomic_t的所有用戶都應將atomic_read()和atomic_set()視為可以完全由編譯器或處理器重新排序或優化的簡單C語句,並顯式調用相應的每個用例的編譯器和/或內存屏障。 如果不這樣做,將導致代碼在與不同的體系結構或編譯器優化一起使用時可能突然中斷,甚至會導致無關代碼的更改,從而改變編譯器優化訪問atomic_t變量的部分的方式。

* 你被警告了! *

暫無
暫無

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

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