■ はじめに
非同期に関する用語について、まとめる
目次
【1】排他制御の仕組み 1)セマフォ(semaphore) 2)ラッチ(Latch) 3)ミューテックス (mutex) 【2】その他 1)シグナル(Signal) 2)クリティカル セクション (critical section) 3)アトミック (Atomic)
【1】排他制御の仕組み
1)セマフォ(semaphore)
Semaphore = 手旗信号、(特に鉄道の)信号機 => プロセス間で交換される信号 * 排他アクセスとする必要がない資源を、 同時にアクセスできるプログラム数を制限する * 以下のサイトの 「一度に一本の列車しか走れない単線の鉄道線路」が イメージしやすいかも
https://docs.oracle.com/cd/E19455-01/806-2732/6jbu8v6os/index.html
特徴
* 処理の同時実行数を制限する事ができる * セマフォ・カウントの 1 つが解放されるまで動作が保留
使いどころ
* スレッドの数を制限したい場合に使用する (例えば、TomcatでMaxThreadを超えさせないために使用とか?)
http://www.weblio.jp/content/%E3%82%BB%E3%83%9E%E3%83%95%E3%82%A9
http://itpro.nikkeibp.co.jp/article/Keyword/20070207/261251/
2)ラッチ(Latch)
Latch = 掛け金、かんぬき => プロセス間で交換される信号 * 「0(オフ/未使用)」または「1(オン/使用中)」の2状態で保持 => スイッチのようにON/OFFを切り替える # 非同期よりも、DBロック機構や電子回路で使用されている用語な感じ
使いどころ
* 非同期で待ち合わせる処理 => 例えば、「2つのサービスに接続済みである必要があり、サービスへの接続を待機する場合」 => スレッドを待機させることができる => 特定の条件が満たされるまですべてのスレッドを保留し、 その条件が満たされると、すべてのスレッドを同時に解放
3)ミューテックス (mutex)
MUTual EXclusion (相互排他) の省略形 * 『ラッチ(Latch)』『バイナリセマフォ(0,1のセマフォ)』と(ほぼ?)同じ
【2】その他
1)シグナル(Signal)
* プロセス間で連絡を取り合うための仕組み
シグナルの具体的な動作
[1] プロセスの実行中に処理を割り込ませたい場合、 カーネルがシグナルを発生。 [2] シグナルが発生すると実行中のプロセスが中断され、 特定の処理(シグナル・ハンドラと呼ぶ)が実行 # イベントドリブンに似てるな~...
同期シグナル
* プログラム(プロセス)自身の動作によって発生するシグナル
非同期シグナル
* 外的な要因で発生するシグナル
イベント同期
* 何かのイベントが発生したときに、シグナル・非シグナル状態を切り替え同期する
参考文献
http://itpro.nikkeibp.co.jp/article/Keyword/20070308/264009/
2)クリティカル セクション (critical section)
* 複数スレッドが共有する資源(共有資源:shared resourse)に アクセスし、取り合う局面 * または、あるタスクの実行を、割込みによって、 同時に一つのスレッドにしか実行させない仕組み * Javaの場合、synchronized で実装 ~~~~~ synchronized (ロックオブジェクト){ // クリティカルセクションコード } ~~~~~
クリティカルセクションに入る
* スレッドがクリティカルセクションを実行すること
クリティカルセクションを出る
* クリティカルセクションの実行を終えること
参考文献
http://miqn.net/rtos/53.html
http://e-words.jp/w/%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.html
3)アトミック (Atomic)
* Atomic = 原子(ここでは「これ以上分割できない」という意味) * 分割不可能な操作