Linux(vfs)
スピンロック関数
spin_lock(&val) 変数valのロックを行う。 ロック出来ない場合は、成功するまで ビジーウェイトする。 spin_unlock(&val) 変数valのロック解除を行う。 spin_trylock(&val) 変数valのロックを行う。 即ロック出来ない場合は、エラーとなる。
spin_lock_irq(&val) ローカルCPUの割り込みを禁止した上で、変数valのロックを行う。 ロック出来ない場合は、成功するまでビジーウェイトする。 spin_unlock_irq(&val) 変数valのロック解除と、ローカルCPUの割り込み禁止解除を行う。
readロック/writeロック
参照頻度の高く、かつ更新を伴わない参照が多い資源用。
複数のプロセスからの同時アクセスを許す。
read_lock(&val) 資源のreadロックを行う。もし既に資源がwriteロックされている場合は、 writeロックが解除されるまでビジーウェイトする。 複数のプロセスから多重にロックすることが可能。 write_lock(&val) 資源のwriteロックを行う。もし既に資源がreadロックまたはwriteロック されている場合は、ロックが解除されるまで ビジーウェイトする。 write_trylock(&val) 資源のwriteロックを行う。もし既に資源がreadロックまたはwriteロック されているされている場合はエラーとなる。 read_unlock(&val) write_unlock(&val) readロックまたはwriteロックの解除を行う。
カーネルロック
v2.4では、カーネルロック(lock_kernel関数)が大幅に スピンロック(spin_lock関数)を用いるように変更されているが、カーネルロックで保護されている資源は多数残されている。
複数のプロセスが同時にカーネルロック(lock_kernel関数)行うと
そのうちの一つのプロセスのみがカーネルロックに成功し、他のプロセスは
カーネルロックが終了するのをカーネルロック関数 (lock_kernel関数)内で
ビジーウェイトして待ち続ける。
#たぶん2重ロックしてもよい