FLAGS

MENU

NOTICE

2009年7月14日火曜日

(プログラム)頭が重い (mixi05-u459989-200907140456)

ミクシ内で書かれた旧おかあつ日記を紹介します。
(プログラム)頭が重い
2009年07月14日04:56
風邪のせいか、シシャ(水タバコ)をすいすぎたせいか、頭が重い...。



今日考えたこと:

マルチスレッドプログラムというのは、実に難しいと思う。

Object lock1 = new Object();
Object lock2 = new Object();

void test1() {
synchronized( lock1 ) {
System.out.print( "a1" );
}
synchronized( lock2 ) {
System.out.print( "a2" );
}
}

void test2() {
synchronized( lock1 ) {
System.out.print( "b1" );
}
synchronized( lock2 ) {
System.out.print( "b2" );
}
}

このふたつのメソッドをそれぞれ別なスレッドで実行したとき、ありえる出力のパターンは何パターンあるだろう。

これははっきりいってムチャムチャ難しい問題だということに気がついた。

a1 b1 a2 b2 なんて素直な結果はめったに出ない。

a1 b1 a2 b2
a1 b1 b2 a2
a1 a2 b1 a2

b1 a1 b2 a2
b1 a1 a2 b2
b1 b2 a1 b2

かな。 たったこれだけなのにこんなに沢山のパターンが出てくる。
これがもし三つのスレッドを同時にやることになったら、どうなるだろう。
さらにnスレッドだとどうなるだろう。

僕にはまったく想像もつかない。
これを全て数え上げる機械的な方法があるだろうか。



これは要するにこういうことだ。

A・Bのふたつ部屋があります。 XさんとYさんのふたりの人がいます。 それぞれの人はまずAに入りZさんに電話をかけ、Bに入りZさんに電話をかけます。 ひとつの部屋にはひとりしか入る事は出来ません。 XさんとYさんは位置について、よーいどんで作業を開始します。

こういう実験をしたとき、Zさんが受け取る電話の順番はどういう順番になるでしょうか。

こういう問題だ。

気をつけないといけないことは多い。

- Xさんも Yさんも、常に全力で走るとは限らず、座ったまま2~3分休んでしまう事もある。
- XさんYさんのどちらが先に部屋Aに入るかは、競争だ。
- Zさんは一度に一人しか電話を受ける事が出来ない。
- またXさんが先にAに入ったとする。 XさんがAから出た後、YさんはAに入る。 XさんとYさんのどちらが先に電話がつながるかは、競争だ。

これを定式化するとどうなるだろう。

... わからない。

今日はもう、頭が痛いので寝よう。

コメント一覧
 
出展 2009年07月14日04:56 『(プログラム)頭が重い』

著者オカアツシについて


小学生の頃からプログラミングが趣味。都内でジャズギタリストからプログラマに転身。プログラマをやめて、ラオス国境周辺で語学武者修行。12年に渡る辺境での放浪生活から生還し、都内でジャズギタリストとしてリベンジ中 ─── そういう僕が気付いた『言語と音楽』の不思議な関係についてご紹介します。

特技は、即興演奏・作曲家・エッセイスト・言語研究者・コンピュータープログラマ・話せる言語・ラオ語・タイ語(東北イサーン方言)・中国語・英語/使えるシステム/PostgreSQL 15 / React.js / Node.js 等々




おかあつ日記メニューバーをリセット


©2022 オカアツシ ALL RIGHT RESERVED