<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=Fetch-and-add</id>
	<title>Fetch-and-add - 修訂紀錄</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=Fetch-and-add"/>
	<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=Fetch-and-add&amp;action=history"/>
	<updated>2026-04-09T05:03:01Z</updated>
	<subtitle>本 wiki 上此頁面的修訂紀錄</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.taigi.ima.org.tw/w/index.php?title=Fetch-and-add&amp;diff=428704&amp;oldid=prev</id>
		<title>TaiwanTonguesApiRobot：​從 JSON 檔案批量匯入</title>
		<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=Fetch-and-add&amp;diff=428704&amp;oldid=prev"/>
		<updated>2025-08-22T16:11:58Z</updated>

		<summary type="html">&lt;p&gt;從 JSON 檔案批量匯入&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;fetch-and-add&amp;#039;&amp;#039;&amp;#039;是 CPU 指令（FAA）， 對內存位置執行增加一个數量的原子操作。具體內容為：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 令 x 變做是 _ x _ + _ a _，其中 x 是一个內存位，a 是一个值&lt;br /&gt;
&lt;br /&gt;
FAA 通用佇實現互斥鎖、信號量。&lt;br /&gt;
&lt;br /&gt;
一九九一年，Maurice Herlihy 證明 fetch-and-add 具有一个有限的 consensus 數，會當解決無超過兩个並發進程的無等待 consensus 問題。&lt;br /&gt;
&lt;br /&gt;
==用途==&lt;br /&gt;
&lt;br /&gt;
下述偽代碼用 ticket lock 算法實現互斥鎖：&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;record&amp;#039;&amp;#039;&amp;#039;locktype {&lt;br /&gt;
_ int _ ticketnumber&lt;br /&gt;
_ int _ turn&lt;br /&gt;
}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;procedure&amp;#039;&amp;#039;&amp;#039;LockInit ( _ locktype _ * lock ) {&lt;br /&gt;
lock . ticketnumber  :=零&lt;br /&gt;
lock . turn  :=零&lt;br /&gt;
}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;procedure&amp;#039;&amp;#039;&amp;#039;Lock ( _ locktype _ * lock ) {&lt;br /&gt;
_ int _ myturn  :=FetchAndIncrement ( &amp;amp; lock . ticketnumber ) / / must be atomic , since many threads might ask for a lock at the same time&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;while&amp;#039;&amp;#039;&amp;#039;lock . turn ≠ myturn&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;skip&amp;#039;&amp;#039;&amp;#039;/ / _ spin until lock is acquired _&lt;br /&gt;
}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;procedure&amp;#039;&amp;#039;&amp;#039;UnLock ( _ locktype _ * lock ) {&lt;br /&gt;
FetchAndIncrement ( &amp;amp; lock . turn ) / / this need not be atomic , since only the possessor of the lock will execute this&lt;br /&gt;
}&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
==硬體軟體支持==&lt;br /&gt;
&lt;br /&gt;
C + + 十一標準定義矣原子的 fetch \ _ add 函數。GCC 共伊做對 C 語言的擴展。&lt;br /&gt;
&lt;br /&gt;
===x 八十六實現===&lt;br /&gt;
&lt;br /&gt;
對八千空八十六起，以內存為目的操作數的 ADD 指令就是講 fetch-and-add。若使用 LOCK 前綴，按呢伊對較濟處理器是原子操作。但是袂使倒轉來原值，一直到四百八十六引入 XADD 指令。&lt;br /&gt;
&lt;br /&gt;
後述 GCC 編譯的 C 語言函數，佇咧 x 八十六的三十二位佮六十四位平台頂，使用擴展 asm 語法：&lt;br /&gt;
&lt;br /&gt;
==參見==&lt;br /&gt;
&lt;br /&gt;
* Test-and-set&lt;br /&gt;
* Test and Test-and-set&lt;br /&gt;
* Compare-and-swap&lt;br /&gt;
* Load-Link / Store-Conditional&lt;br /&gt;
&lt;br /&gt;
==參考文獻==&lt;br /&gt;
&lt;br /&gt;
[[分類: 待校正]]&lt;/div&gt;</summary>
		<author><name>TaiwanTonguesApiRobot</name></author>
	</entry>
</feed>