ロック、ミューテックス、セマフォは、複数(スレッドまたはプロセス?)アクセスを同時に何かに同期させるために使用されると思います。
この「モノ」は、複数(スレッドまたはプロセス)間で共有メモリでなければなりませんか?
それでは、ロック、ミューテックス、セマフォはプロセスの複数のスレッドでのみ使用され、同じプロセスの複数のスレッドはメモリを共有しますが、複数のプロセスはメモリを共有しないため、複数のプロセスには使用されません。
ありがとうございます。
答え1
スレッド間またはプロセス間でロック、ミューテックス、セマフォが使用されますか?
どちらの場合も、ロックの基本要素の例を見つけることができます。たとえば、pthread mutex は同じプロセスのスレッド間の相互排除に使用されます。一方、システムV IPC(man svipc
)セマフォはプロセス全体で使用できます。ファイルシステムレベルのロック(ファイルまたはファイルの一部)を使用して、複数のプロセス間を調整することもできます。
この「モノ」は、複数(スレッドまたはプロセス)間で共有メモリでなければなりませんか?
必ずしも共有メモリではありません。すべての種類のリソースは同期プリミティブによって保護できます。プロセスとスレッド間で共有される共有メモリブロックは、おそらく最も一般的な例です。ただし、ファイルハンドル(ファイル全体またはファイルの一部をロックすること、または独自のリソース用の他の種類の「ハンドル」をロックすること)などの他のものもあります。 )また、ハードウェアデバイスにアクセスできます。
それでは、ロック、ミューテックス、セマフォはプロセスの複数のスレッドでのみ使用され、同じプロセスの複数のスレッドはメモリを共有しますが、複数のプロセスはメモリを共有しないため、複数のプロセスには使用されません。
まあ…いいえ。プロセスはメモリを共有できます。 (実際にはほとんどは読み取り専用の方法でのみこれを行います。共有ライブラリコードを含むページはプロセス間で共有されますが、保護は必要ありません。フォーク時に実行される書き込み時にコピー共有マップには次のものが必要です。 .protection ですが、カーネルはこれを透過的に処理します。これには、共有メモリマップのロックが含まれます。
プロセスやスレッドが共有できるもの(少なくとも1つ以上が書き込める場合)には保護/調整が必要で、ファイルとデバイスが最も一般的な2つだと思います。