翻訳と辞書
Words near each other
・ CTOT
・ CTP
・ CTP synthase 1
・ CTP synthetase
・ CTP-dependent riboflavin kinase
・ CTPP
・ CTPS
・ CTPS2
・ CTQ
・ CTQ tree
・ CTR
・ CTR9
・ CTrain
・ CTran (Elmira, NY)
・ CTRC
Ctrie
・ Ctrip
・ CTRL
・ Ctrl (album)
・ CTRL (gene)
・ Ctrl (web series)
・ Ctrl Alt Delete (album)
・ Ctrl Emotion
・ Ctrl+Alt+Del (webcomic)
・ Ctrl.Alt.Shift
・ CtrlS
・ CtrlShift
・ CTRM
・ CTRN
・ CtRNA


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

Ctrie : ウィキペディア英語版
Ctrie

A concurrent hash-trie or Ctrie〔Prokopec, A. et al. (2011) (Cache-Aware Lock-Free Concurrent Hash Tries ). Technical Report, 2011.〕〔Prokopec, A., Bronson N., Bagwell P., Odersky M. (2011) (Concurrent Tries with Efficient Non-Blocking Snapshots )〕 is a concurrent thread-safe lock-free implementation of a hash array mapped trie. It is used to implement the concurrent map abstraction. It has particularly scalable concurrent insert and remove operations and is memory-efficient.〔Prokopec, A. et al. (2011) (Lock-Free Resizeable Concurrent Tries ). The 24th International Workshop on Languages and Compilers for Parallel Computing, 2011.〕 It is the first known concurrent data-structure that supports O(1), atomic, lock-free snapshots.〔〔Prokopec, A. (JVM implementation on GitHub )〕
== Operation ==

The Ctrie data structure is a non-blocking concurrent hash array mapped trie based on single-word compare-and-swap instructions in a shared-memory system. It supports concurrent lookup, insert and remove operations. Just like the hash array mapped trie, it uses the entire 32-bit space for hash values thus having low risk of hashcode collisions. Each node may branch to up to 32 sub tries. To conserve memory, each node contains a 32 bits bitmap where each bit indicates the presence of a branch followed by an array of length equal to the Hamming weight of the bitmap.
Keys are inserted by doing an atomic compare-and-swap operation on the node which needs to be modified. To ensure that updates are done independently and in a proper order, a special indirection node (an I-node) is inserted between each regular node and its subtries.
The figure above illustrates the Ctrie insert operation. Trie A is empty - an atomic CAS instruction is used to swap the old node C1 with the new version of C1 which has the new key ''k1''. If the CAS is not successful, the operation is restarted. If the CAS is successful, we obtain the trie B. This procedure is repeated when a new key ''k2'' is added (trie C). If two hashcodes of the keys in the Ctrie collide as is the case with ''k2'' and ''k3'', the Ctrie must be extended with at least one more level - trie D has a new indirection node I2 with a new node C2 which holds both colliding keys. Further CAS instructions are done on the contents of the indirection nodes I1 and I2 - such CAS instructions can be done independently of each other, thus enabling concurrent updates with less contention.
The Ctrie is defined by the pointer to the root indirection node (or a root I-node). The following types of nodes are defined for the Ctrie:
structure INode

structure CNode

Branch: INode | SNode

structure SNode
A C-node is a branching node. It typically contains up to 32 branches, so ''W'' above is 5. Each branch may either be a key-value pair (represented with an S-node) or another I-node. To avoid wasting 32 entries in the branching array when some branches may be empty, an integer bitmap is used to denote which bits are full and which are empty. The helper method ''flagpos'' is used to inspect the relevant hashcode bits for a given level and extract the value of the bit in the bitmap to see if its set or not - denoting whether there is a branch at that position or not. If there is a bit, it also computes its position in the branch array. The formula used to do this is:

bit = bmp & (1 << ((hashcode >> level) & 0x1F))
pos = bitcount((bit - 1) & bmp)
Note that the operations treat only the I-nodes as mutable nodes - all other nodes are never changed after being created and added to the Ctrie.
Below is an illustration of the pseudocode of the insert operation:
def insert(k, v)
r = READ(root)
if iinsert(r, k, v, 0, null) = RESTART insert(k, v)
def iinsert(i, k, v, lev, parent)
cn = READ(i.main)
flag, pos = flagpos(k.hc, lev, cn.bmp)
if cn.bmp & flag = 0
cn.array(pos) match
}
The ''inserted'' and ''updated'' methods on nodes return new versions of the C-node with a value inserted or updated at the specified position, respectively. Note that the insert operation above is tail-recursive, so it can be rewritten as a while loop. Other operations are described in more detail in the original paper on Ctries.〔〔http://axel22.github.io/resources/docs/lcpc-ctries.ppt〕
The data-structure has been proven to be correct〔 - Ctrie operations have been shown to have the atomicity, linearizability and lock-freedom properties. The lookup operation can be modified to guarantee wait-freedom.

抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「Ctrie」の詳細全文を読む



スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.