他のプロセス/スレッド/何かが半分完成した状態で物事を見る可能性がない状態で関数が完了することが保証されている場合、それはアトミックであると言われます。それは起こったか起こらなかったかのどちらかであり、途中の方法はありません。私はWindowsと話すことはできませんが、アトミックであることが保証されているPOSIXのファイル操作(Linux / BSD / etcが固執しようとするもの)はほとんどありません。読み取りと書き込みはアトミックであることが保証されていません。
ファイルに2バイトを書き込むことはほとんどありませんが、別のプロセスでは、書き込まれたバイトの1つだけが表示されますが、運が悪ければ、書き込みがメモリ内の2つの異なるページにまたがり、VMシステムが2番目のページを準備するために何かをしなければなりませんでした。ページでは、2番目のプロセスで1つのバイトが他のバイトなしで表示される可能性があります。通常、ファイル内でページが整列している場合、それらはメモリ内にありますが、これも信頼できません。
これは、POSIXでアトミックなもので作成されたリストです。これはかなり短いので、その信頼性を保証することはできません。(たとえば、リンク解除がリストされていない理由は考えられません)。
また、ネットワークファイルシステム(UnixのNFS、またはWindowsのSMBマウント)を介してファイルにアクセスし始めた瞬間に、動作しているように見えるものをテストして実行しないように注意します。長いです。
最初のプロセスがファイルを書き込んでいる間に2番目のプロセスでチェックサムを計算する場合は、2つのプロセス間のパイプを開き、最初のプロセスですべてのコピーをチェックサムプロセスに書き込むことができます。これは、ロックを処理するよりも高速な場合があります。