プロセス間の同期化はロックを用いて行ないます。fml8 でサポートされてい るロックメカニズムは flock(2) or lockf(2) を元にしたロック機構のみです。
ながらく giant lock でしたが、2003/03 に giant lock をなくしました。
現在では、いろいろなりソースごとに、ロックチャンネルが用意されています。
たとえば、Mail::Delivery 関連はメンバーリストにアクセスするので、いろ いろとロックが必要です。
Mail::Delivery::SMTP の操作の際にはメンバーリストのロックが必要です。 現在は、Mail::Delivery::SMTP を呼び出す FML のクラス(実は FML::Send と FML::Process::Delivery の2箇所しかない)の中でロック処理をしています。
一方、Mail::Delivery::Queue は見るだけ (mailq コマンド)か、並列操作可 能なものだけなので、ロックは考えなくて良いはずです。
そして、write lock とは限らないが、一般に map を使うモジュールには ロックが必要です。write が必要とは限りません。 たとえば FML/Command/UserControl.pm や FML/Command/Auth.pm には write lock が必要ですが、 FML/Credential.pm は read lock だけでよいです。
しかしながら、いまのところ reader writer lock は実装されていませんので、 リソースごとの細かいロック制御で critical region の時間を短くするよう になっています。
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>.