跳至內容
主選單
主選單
移至側邊欄
隱藏
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
Taiwan Tongues 台語維基
搜尋
搜尋
外觀
建立帳號
登入
個人工具
建立帳號
登入
檢視 Fetch-and-add 的原始碼
頁面
討論
臺灣正體
閱讀
檢視原始碼
檢視歷史
工具
工具
移至側邊欄
隱藏
操作
閱讀
檢視原始碼
檢視歷史
一般
連結至此的頁面
相關變更
特殊頁面
頁面資訊
外觀
移至側邊欄
隱藏
←
Fetch-and-add
由於以下原因,您無權編輯此頁面:
您請求的操作只有這些群組的使用者能使用:
使用者
、taigi-reviewer、apibot
您可以檢視並複製此頁面的原始碼。
'''fetch-and-add'''是 CPU 指令(FAA), 對內存位置執行增加一个數量的原子操作。具體內容為: : 令 x 變做是 _ x _ + _ a _,其中 x 是一个內存位,a 是一个值 FAA 通用佇實現互斥鎖、信號量。 一九九一年,Maurice Herlihy 證明 fetch-and-add 具有一个有限的 consensus 數,會當解決無超過兩个並發進程的無等待 consensus 問題。 ==用途== 下述偽代碼用 ticket lock 算法實現互斥鎖: ` ` ` '''record'''locktype { _ int _ ticketnumber _ int _ turn } '''procedure'''LockInit ( _ locktype _ * lock ) { lock . ticketnumber :=零 lock . turn :=零 } '''procedure'''Lock ( _ locktype _ * lock ) { _ int _ myturn :=FetchAndIncrement ( & lock . ticketnumber ) / / must be atomic , since many threads might ask for a lock at the same time '''while'''lock . turn ≠ myturn '''skip'''/ / _ spin until lock is acquired _ } '''procedure'''UnLock ( _ locktype _ * lock ) { FetchAndIncrement ( & lock . turn ) / / this need not be atomic , since only the possessor of the lock will execute this } ` ` ` ==硬體軟體支持== C + + 十一標準定義矣原子的 fetch \ _ add 函數。GCC 共伊做對 C 語言的擴展。 ===x 八十六實現=== 對八千空八十六起,以內存為目的操作數的 ADD 指令就是講 fetch-and-add。若使用 LOCK 前綴,按呢伊對較濟處理器是原子操作。但是袂使倒轉來原值,一直到四百八十六引入 XADD 指令。 後述 GCC 編譯的 C 語言函數,佇咧 x 八十六的三十二位佮六十四位平台頂,使用擴展 asm 語法: ==參見== * Test-and-set * Test and Test-and-set * Compare-and-swap * Load-Link / Store-Conditional ==參考文獻== [[分類: 待校正]]
返回到「
Fetch-and-add
」。