FLAGS

筆者おかあつ 大きな区分 記事の区分 記事の一覧 検索 ツイート

2009年7月12日日曜日

(プログラムネタ)排他ロック (mixi05-u459989-200907120519)

ミクシ内で書かれた旧おかあつ日記を紹介します。
(プログラムネタ)排他ロック
2009年07月12日05:19
排他制御(ロック)のいろいろ

・ロックとは

ロックとは、ある限られた数のリソースを複数のスレッドから利用するときに競合が起こらないようにするためのコンピューター上の機構である。 ここでいうスレッドとは人のようなもので、リソースというのはたとえばトイレのようなものだ。 そして競合というのはすでにトイレに人が入っているのにドアを開けてしまったような状態の事を指す。

そういうことにならないように、トイレのドアにはロックをかけるのがマナーである。 トイレのドアにはロックをかけるのがマナーであるのと同じように、コンピューター上のファイルなどの資源を利用するときもロックをかけるのがマナーである。 そうしないと複数のスレッドが同時に操作してしまい、ファイルが壊れてしまったりすることがある。

これがプログラミングでのロックである。



・Read/Write Lock とは

たとえばこういうことである。

その居酒屋のトイレには、個室が残念ながらひとつしかなかった。 しかしその個室には洋式便器がひとつついているほか、いくつかの男性用便器も備えてあった。 店はかなり繁盛していたがトイレが明らかに足りなかった。 毎日トイレには行列が出来ていた。 そこで店主は一案を考えた。

どうせ男性は他人のものを見ても見られても大して気にするわけではない。 であれば、男性が並んでいるとき、そのときに既にトイレに入っている人が男性であれば、入ってしまって用をたしてしまえばいいだろう、という事だった。 そうすればトイレを増設することなく多少混雑を緩和できるかもしれない。

このようなことはコンピューターの世界でも発生する。 ファイルを読み込むときにいちいちファイルをロックするとファイルの読み込みが混雑してしまう。 読み込むだけであれば他の処理と共有して読んでももかまわないだろう。

これをコンピューターの世界では read lock と呼ぶ。

そして、女性はトイレに入っている男性が全員出た後、トイレに入ってロックをかける。 女性がトイレに入っている間は男性は入ってはいけない。

このようなこともコンピューターの世界ではしばしば発生する。 たとえば、ある処理がファイルを書き込むときは、その書き込みしている経過は他の処理に見せたくない。

これをコンピューターの世界では write lock と呼ぶ。



その他...

・ mandatory / advisory Lock とは

  File Locking
  http://en.wikipedia.org/wiki/File_locking

・ Dirty Read その他
  
  Isolation (Transaction)
  http://en.wikipedia.org/wiki/Isolation_%28database_systems%29

Lock
http://en.wikipedia.org/wiki/Lock_%28computer_science%29


Win32 CreateFile ( MSDN )
http://msdn.microsoft.com/en-us/library/aa363858%28VS.85%29.aspx

Win32 OpenFile ( MSDN )
http://msdn.microsoft.com/en-us/library/aa365430%28VS.85%29.aspx

NFS
http://en.wikipedia.org/wiki/Network_File_System_%28protocol%29

SAMBA
http://en.wikipedia.org/wiki/Samba_%28software%29

WebDAV
http://en.wikipedia.org/wiki/WebDAV
http://www.studyinghttp.net/history.shtml#WebDAV



今日は夕方までああでもないこうでもないと、相変わらず Locking と interning について調べていた。 疲れたので今日は食事をしてからサウナに行った。サウナで4時間ぐらい考え事をした。

アドバイザリロックとマンダトリロックの違いがすっと頭に入るようになった。 他にもいくつかアイデアが浮かんだ。

コメント一覧
 
出展 2009年07月12日05:19 『(プログラムネタ)排他ロック』