ロック、ミューテックス、セマフォは、同期された複数(スレッドまたはプロセス?)が何かに同時にアクセスするために使用されると思います。
この「何か」は、複数(スレッドまたはプロセス)の間の共有メモリでなければなりませんか?
はいの場合、それは、ロック、ミューテックス、セマフォが、プロセスの複数のスレッドではなく、プロセスの複数のスレッドでのみ使用されることを意味しますか?
ありがとう。
ロック、ミューテックス、セマフォはスレッド間またはプロセス間ですか?
両方の状況でのプリミティブのロックの例が見つかります。たとえば、pthreadミューテックスは、同じプロセスのスレッド間の相互排除に使用されます。一方、System V IPC( man svipc
)セマフォはプロセス間で使用できます。ファイルシステムレベルのロック(ファイルまたはファイルの一部)は、複数のプロセス間の調整にも使用できます。
この「何か」は、複数(スレッドまたはプロセス)の間の共有メモリでなければなりませんか?
必ずしも共有メモリではありません。あらゆる種類のリソースを同期プリミティブで保護できます。共有メモリの一部(プロセスやスレッド間で共有される)はおそらく最も一般的な例ですが、ファイルハンドル(ファイル全体、ファイルの一部、またはその他の種類の「ハンドル」を固有のリソースにロックする)のようなものもあります。 )およびハードウェアデバイスへのアクセスも可能です。
はいの場合、それは、ロック、ミューテックス、セマフォが、プロセスの複数のスレッドではなく、プロセスの複数のスレッドにのみ使用されることを意味しますか?
うーん、ダメ。プロセスはメモリを共有できます。 (そして実際、それらのほとんどは、読み取り専用の方法でのみ、そうします-共有ライブラリコードを含むページはプロセス間で共有されます。ただし、保護は必要ありません。フォーク時に保護されたコピーオンライト共有マッピングは保護が必要です。しかし、カーネルは透過的に処理します-これには、共有メモリマッピングのロックが含まれます。これは、概念的には、メモリ領域/データ構造を保護する通常のロックとは少し異なります。)
プロセスまたはスレッドが共有できるその他のもの(少なくとも1つが書き込み可能な場合)には、保護/調整が必要です。ファイルとデバイスが2つあると私は考えています。