SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
同期通信によるモデルのチャネルを
使った実装——食事する哲学者問題
を例に
岸本 誠
Go(Go言語)について
●
GoogleのKen Thompson,
Rob Pikeらによって
設計・開発
●
基本的にはC言語風
●
型の記法はAlgol(Pascal)系
●
Cの嫌な点はほとんどを改善
●
GCはあるが、オブジェクトetc
の機能はほどほど
Go(Go言語)について(cont)
●
GAEクラウドで使える
コンパイラ言語として重宝
●
インタプリタ的な実行も可能
●
現在1.4.x
●
Google Native Client (NaCl)
対応などが進行中
チャネル
●
CSPから影響を受けている、
Go言語の 主要機能の一つ
●
ライブラリではない
●
スローガン
Do not communicate by sharing
memory; instead, share memory
by communicating.
 (共有メモリによって通信せず、
  通信によってメモリを共有せよ)
ゴルーチン・チャネル・通信
●
ゴルーチン
→ いわゆるスレッド
●
チャネル
→ 通信の口(ソケットの
 ようなもの、first class)
●
チャネル通信
→ ライブラリ関数ではなく
 そういう構文がある
ゴルーチン・チャネル・通信
●
ゴルーチン
●
構文
go <関数呼出>
●
例
go foo()
●
無名関数をその場で作って
呼出すこともできる
ゴルーチン・チャネル・通信
●
チャネル
●
型: データ型名の前に
chan を付ける
例: chan int
●
生成: 言語組込みの型を作る
汎用組込関数 make で作る
例: ch := make(chan int[, size])
●
サイズの指定もできる
ゴルーチン・チャネル・通信
●
チャネル通信
●
送信は「送信文」
例:
ch <- 10
●
受信は「受信演算子」(前置)
例:
v := <-ch
<-ch // 受信するだけ
ゴルーチン・チャネル・通信
●
チャネル通信(cont)
●
select文
●
caseに送受信イベントを列挙
●
CSPの外部選択
●
CSPについては次で
CSPとは
●
Communicating Sequential
Processes
●
C・A・R・ホーア(クイック
ソートや公理的意味論)考案
●
参考資料
『並行システムの検証と実装』
サンプル「食事する哲学者の問題」
●
素朴に実装すると、並行するプ
ロセスがデッドロックし得る例
●
デッドロック回避アルゴリズム
や同期プリミティブのサンプル
●
ここでは『並行システムの検証
と実装』の§4.4から
サンプル「食事する哲学者の問題」
http://commons.wikimedia.org/wiki/File:Dining_philosophers.png
サンプル「食事する哲学者の問題」
サンプル「食事する哲学者の問題」
●
方針
●
Go言語の機能を紹介するもの
とする
●
JCSP版のようなCSPモデル
になるべく沿った形には、し
ない
●
簡単な修正で、デッドロック
するものとしないものを示す
CSPによるモデルの記述
●
以下、全て前述の出典より
CSPによるモデルの記述
CSPによるモデルの記述
サンプル「食事する哲学者の問題」
●
ソースコード解説
● ( https://gist.github.com/metanest/
e58bb0e8c013f52ccd7d )
●
デモ

Más contenido relacionado

Más de Makoto Kishimoto (9)

CHP survey
CHP surveyCHP survey
CHP survey
 
some SHA1 implementation
some SHA1 implementationsome SHA1 implementation
some SHA1 implementation
 
Visulan intro
Visulan introVisulan intro
Visulan intro
 
20151121
2015112120151121
20151121
 
FZ and DAZ in denormals
FZ and DAZ in denormalsFZ and DAZ in denormals
FZ and DAZ in denormals
 
Tech oyaji ksmakoto_presen
Tech oyaji ksmakoto_presenTech oyaji ksmakoto_presen
Tech oyaji ksmakoto_presen
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Node handson
Node handsonNode handson
Node handson
 
app-c.odp
app-c.odpapp-c.odp
app-c.odp
 

Shizuoka go lang csp