2010年7月22日木曜日

マルチスレッドプログラミング

Androidでオーディオプログラミングの続きをしていた。

ネットでマルチスレッドを使って録音プログラム作っている人を発見[1]。
で、いじくってみようと思ったら、マルチスレッドプログラミングに関して余りにも無知なのでコードがよく理解できない…。

ということで、少し周辺知識について調べてみた。

・排他制御
複数のプログラムが一つのリソースにアクセスする際に、競合が発生しないように整合性を保つための仕組み[2]。


・同期
複数のエージェントの動作を時系列で制御すること[3]。
(エージェント:何らかの処理を行う仕組みのこと。プログラムとか)


・ハンドラ
割り込み時に実行されるプログラムのこと。
リスナーと同義[4][5]。


・セマフォ
同期機構の一種。
複数のスレッドが共有リソースにアクセスするような仕組みを作る際に、一度にアクセス出来るスレッドの数を制限したい時に使用する。
具体的にはセマフォ変数という共有変数を用いて実現される。
セマフォ変数の初期値は共有リソースに対して、一度にアクセス可能なスレッドの数である。
共有リソースにアクセスするスレッドはセマフォ変数をデクリメントする。
この時、セマフォ変数がゼロの場合、そのスレッドは共有リソースにアクセスすることは出来ない。
共有リソースへのアクセスが終了したスレッドはセマフォ変数をインクリメントする[6][7]。


・ミューテックス
同期機構の一種。
仕組みはセマフォと同じ。
セマフォ変数の初期値を1に設定したセマフォ。
複数のスレッドが共通のリソースにアクセスする際に、一つのスレッドのみにアクセス権を与えるようにして、スレッドを同期化する仕組み。
Mutexという語はMUTual EXclusion(相互排他)の略[8][9]。



・クリティカルセクション
マルチスレッドプログラミングにおいて、共有リソースを複数のスレッドが取り合うような部分のこと。クリティカルセクションを実行することが出来るスレッドの数は一つに限られる[10][11]。


参考URL
[1]http://d.hatena.ne.jp/yamanetoshi/20100202/1265116750
[2]http://ja.wikipedia.org/wiki/%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1
[3]http://ja.wikipedia.org/wiki/%E5%90%8C%E6%9C%9F_(%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6)
[4]http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000546.html
[5]http://e-words.jp/w/E589B2E3828AE8BEBCE381BFE3838FE383B3E38389E383A9.html
[6]http://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%9E%E3%83%95%E3%82%A9
[7]
[8]http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A5%E3%83%BC%E3%83%86%E3%83%83%E3%82%AF%E3%82%B9
[9]http://www-06.ibm.com/jp/domino04/pc/support/beginner.nsf/btechinfo/SYB0-014660D
[10]http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AB%E3%83%AB%E3%82%BB%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
[11]http://www.tokumaru.org/techterm/critical_section.html

0 件のコメント:

コメントを投稿