しらいです。

 昔は「NFS では lock が効かない」は常識だったので隔世の感が。

In article <YAS.06Sep18155520@kirk.is.tsukuba.ac.jp>,
Yasushi Shinjo <yas@is.tsukuba.ac.jp> wrote:
>新城@筑波大学情報です。こんにちは。

>ロックの問題ですが、具体的な症状としては、ファイルをロックし
>ようとすると固まってしまうということです。クライアントは、
>Linux、サーバは、MacOSX です。

 Linux の NFS は実装が不完全なことで有名ですが、特に lockd
は上手く働かないことが多いようです。
 相手が同じ Linux kernel で同じ architecture だと割と安定し
てますが、それでも失敗する時には失敗するので、こと Linux に
関しては昔の fcntl() の常識を適用すべきかと。

 因みに、経験則から言うと、deadlock する時には「client 数が
多過ぎ」とか何とか吐いてた気がするので、unlock されるのを待
っている client が多いと何かまずいのかも。


>情報ありがとうございます。flock() は固まらないだけで、ロック
>としては働いていないということかもしれませんね。
>fcntl(F_SETLK) に問題があるからといってねflock() で代替する
>というのは、危ないですね。

 glibc を使う限りは lockf() も fcntl() を使って lock 機構を
実装しているように見えるので、lockf() に逃げるという解もあり
ません。
 flock() に関しては、Linux kernel 2.x 以降では独立の system
call なので、man page のとおり「NFS で使えない別の lock 機構」
ですが、kernel 1.x だと fcntl() を使うので同じ機構ですね。

-- 
                                               しらい たかし