ロック

fml8 チュートリアル (バージョン 7.99.1-20180910)
Prev |  | Next

# Chapter 50. ロック

プロセス間の同期化はロックを用いて行ないます。 fml8 でサポートされているロックメカニズムは flock(2) もしくは lockf(2) を元にしたロック機構のみです。

# ロックの概要

ながらく giant lock でしたが、2003/03 に giant lock をなくしました。

現在では、いろいろなりソースごとに、ロックチャンネルが用意されています。

たとえば、Mail::Delivery 関連はメンバーリストにアクセスするので、 いろいろとロックが必要です。

Mail::Delivery::SMTP の操作の際にはメンバーリストのロックが必要です。 現在は、Mail::Delivery::SMTP を呼び出す FML のクラス(実は FML::Send と FML::Process::Delivery の２箇所しかない)の中でロック処理をしています。

一方、Mail::Delivery::Queue は見るだけ (mailq コマンド)か、 並列操作可能なものだけなので、ロックは考えなくて良いはずです。

そして、reader writer lock まで大げさでなくとも 一般に map を使うモジュールにはロックが必要です。 write 用の lock が必要とは限りません。 たとえば FML/Command/UserControl.pm や FML/Command/Auth.pm には write 用の lock が必要ですが、 FML/Credential.pm は read 用の lock だけでよいです。

しかしながら、いまのところ reader writer lock は実装されていませんので、 リソースごとの細かいロック制御で critical region の時間を短くするようになっています。

Prev | Home | Next
議論 | Up | TODO

fml 8.0 (fml-devel) project homepage is www.fml.org/software/fml8/.
fml 4.0 project homepage is www.fml.org/software/fml4/.
about one floppy bsd routers, see www.bsdrouter.org/.
other free softwares are found at www.fml.org/software/.

author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.

For questions about FML, e-mail <fml-bugs@fml.org>.