Mercurial > hg > Papers > 2016 > kazuma-midterm
changeset 8:4c9d4ecb17e6
add cas.pdf
author | Kazuma |
---|---|
date | Fri, 21 Oct 2016 16:57:49 +0900 |
parents | ab8f0312b171 |
children | 600fe9e28aed |
files | midterm.tex pic/cas.pdf |
diffstat | 2 files changed, 12 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/midterm.tex Thu Oct 20 22:51:34 2016 +0900 +++ b/midterm.tex Fri Oct 21 16:57:49 2016 +0900 @@ -24,7 +24,7 @@ \author{135768K 武田和馬 {}{} 指導教員 : 河野真治} \date{} \maketitle -\thispagestyle{fancy} +\thispagestyle{fancy} \section{非破壊木構造データベース} @@ -49,18 +49,24 @@ しかし、図1のように木構造でゲームは構成されているため、RDB向けにノードの関係を変換する必要がある。 つまり、そのまま格納することができればスケールアウトするデータにも対応でき、データベース設計も簡略化できると考え、C\#に書き直すことにした。 -PlayerPrefsとは、Unityに特化したバイナリ形式でKey,Valueで保存されるものである。 +PlayerPrefsとは、Unityに特化したバイナリ形式でKey,Valueのみで保存されるものである。 \section{Jungle-Sharpの実装} JungleはJavaで書かれているものであったのでUnityで使うにはC\#で実装する必要があった。 +なお、将来的にはクライアント側はC#、サーバー側はJavaで動作させMessagePackを用いてデータのやり取りを行う。 \section{AtomicRefefarenceの実装} % atomic reference問題 +Jungleの木の更新(commit)は、CAS(check and set*図1)を用いて atomic に行われる。競合している書き込みにの中で自分の書き込みが成功した場合に関数 \verb+success()+が成功する。 JavaにはAtomicRefarenceが標準であったがC\#はなかったため、AtomicReferenceのClassを新たに作った。 +\begin{figure}[h] +\includegraphics[width=2cm, bb=0 0 172 200]{pic/cas.pdf} +\end{figure} + {\scriptsize -\begin{itembox}[l]{図1 AtomicReference.cs} +\begin{itembox}[l]{図2 AtomicReference.cs} \begin{verbatim} public class AtomicReference <T> where T : class { private T value; @@ -87,12 +93,13 @@ これによりスレッドセーフな値の変更を行うことが可能になる。 \section{Listの実装} - +Jungleでは、木の編集や、特定のNode下のTreeの探索、Nodeの親をたどるためには全てそのNodeへのPathが必要になる。 +その管理をListで行っている。 Listを実装する際にIteratorが必要となる。 C\#にはIEnumeratorがあるのでそれを利用した。 {\scriptsize -\begin{itembox}[l]{図2 List.cs} +\begin{itembox}[l]{図3 List.cs} \begin{verbatim} public IEnumerator<T> iterator() { Node<T> currentNode = head.getNext();