自分用のメモです。
この説明 のてきとう訳です。
自分の場合いつも意訳しないと英語を理解できないので、余計な言葉を想像で補って訳を作ります。
ちなみに自分の高校時代の英語の成績は5段階で下から2番目です(^^)
あくまで自分用のメモですので、正確なところは各自でお調べください。
【訳: Caution: Synchronization limitation】
・1つのfile_lockクラスが、同一のプロセスで動作している2つのスレッドを同期しようとする場合、
動作不定になります。
・1つのプロセスが、同一のファイルを指す2つのfile_lockクラスを使用する場合、動作不定になります。
最初の制限は、主にPOSIXから来るものです。POSIXのファイルハンドルはプロセス単位の属性であり、
スレッド単位の属性ではないからです。
これが意味するところは、もし1つのスレッドがファイルロックオブジェクトを使ってファイルをロックしてしまうと、
(同じプロセスの)他のスレッドもそのファイルをロックしているように振舞うということです。
Windowsのファイルロックのメカニズムは、一方で、スレッドの同期の保障を提供します。
(POSIXの場合にはスレッドごとに別々にロックの所有権を持てなかったのに対して、)
Windowsの場合、あるスレッドが(他のスレッドによって)すでにロックされたファイルをロックしようとするとブロックされることになります。
2つ目の制限は、Windowsでは、ファイルロックの同期状態の情報が、ファイル記述子1つだけに結び付けられる、という事実に起因します。
これが意味するところは、もし(1つのプロセスで)2つのファイルロックオブジェクトが同一のファイルを指すように作成されたなら、同期は保障されないということです。
POSIXの場合、2つのファイル記述子が1つのファイルをロックするために使用されて、
そのうちの1つの記述子がクローズされたなら、呼び出しているプロセスがセットしたすべてのファイルロックは、クリアされます。
参考:
・ファイルロックをするには?(boostのfile_lock)
ファイル記述子 (Wiki)