日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第4章 原子操作 第二节

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第4章 原子操作 第二节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

-------------------------------------------------------------


上一章節說的原子操作,有同學在下面留言說,原子操作不是萬能的吧?

確實是,原子操作不是萬能的,體系結構在完成原子操作部分也是花費了很大的心思,不同下CPU 應該有自己的實現方式。


CPU 在進行原子操作的時候,其他代碼是不能執行的,比如,教室里面只有一個游戲機,A 同學在游戲機上玩的時候,其他人是不能再去占領他的東西的,所以在編寫原子操作相關的代碼的實話,只能在那些特別重要的整型變量上去使用,不可能讓一個函數去實現原子操作,這樣系統調度就出現問題了。


原子操作代碼位置:

./include/asm-generic/atomic.h


原子操作初始化:


#define ATOMIC_INIT(i) { (i) }


原子數據類型,我們看Linux 內核代碼,發現內核把原子當作成一個數據類型來聲明,如果你這個變量是原子類型的,以后的操作就應該使用原子操作來使用它。


typedef struct {

int counter;

} atomic_t;


#ifdef CONFIG_64BIT

typedef struct {

long counter;

} atomic64_t;

#endif



原子操作自增:


static inline void atomic_add(int i, atomic_t *v)

{

atomic_add_return(i, v);

}


再調用


#ifndef atomic_add_return

static inline int atomic_add_return(int i, atomic_t *v)

{

unsigned long flags;

int temp;


raw_local_irq_save(flags); /* Don't trace it in an irqsoff handler */

temp = v->counter;

temp += i;

v->counter = temp;

raw_local_irq_restore(flags);


return temp;

}

#endif


其中的原理就是鎖住中斷,等操作完成后,再釋放中斷,比如這里有一個門,門后面的操作就是更換衣服,正常情況下,所有人都可以進去里面更換衣服,但是呢?有一個明星過來了,它就是原子,原子跟老板(CPU)說,我換衣服的時候,其他人都不能進來哈,然后它就進入里面換衣服了,等它換好衣服了,出來了,老板(CPU)說,你們這些靚仔可以進去了。

------------------------------------------------------


總結

以上是生活随笔為你收集整理的第4章 原子操作 第二节的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。