Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
同期通信によるモデルのチャネルを
使った実装——食事する哲学者問題
を例に
岸本 誠
Go(Go言語)について
●
GoogleのKen Thompson,
Rob Pikeらによって
設計・開発
●
基本的にはC言語風
●
型の記法はAlgol(Pascal)系
●
Cの嫌な点はほとんどを改善
●
GCはあるが、オブジェクトe...
Go(Go言語)について(cont)
●
GAEクラウドで使える
コンパイラ言語として重宝
●
インタプリタ的な実行も可能
●
現在1.4.x
●
Google Native Client (NaCl)
対応などが進行中
チャネル
●
CSPから影響を受けている、
Go言語の 主要機能の一つ
●
ライブラリではない
●
スローガン
Do not communicate by sharing
memory; instead, share memory
by com...
ゴルーチン・チャネル・通信
●
ゴルーチン
→ いわゆるスレッド
●
チャネル
→ 通信の口(ソケットの
 ようなもの、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 )
●
デモ
Upcoming SlideShare
Loading in …5
×

Shizuoka go lang csp

921 views

Published on

同期通信によるモデルのチャネルを使った実装----食事する哲学者問題を例に

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Shizuoka go lang csp

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

×