4

プロセス間通信を調整するための一般的な呼び出しである shmget() のような POSIX 共有メモリを使用しましょう。shmget() を呼び出して共有メモリ セグメントで通信を調整する方法は、Linux が単一プロセスで共有メモリとスレッド間の同期を実装する方法とは異なります。それらの1つはより軽量ですか?

4

2 に答える 2

3

SHM は、複数のプロセスでの IPC 用です。最新の OS では、各プロセスは互いのメモリ空間を見ることができません。共通キーを使用shmget()して共有メモリを取得し、共有shmat()メモリページを各プロセス内のローカルメモリアドレスにマップするために使用します。マップされた共有メモリ アドレスは、メモリ使用量と各プロセス空間にロードされる共有ライブラリが異なるため、異なる場合があります。そして、SHMキー、サイズは、それらのプロセスの間で事前に定義され、固定されています。

スレッドのメモリについては、共有メモリとは呼ばないかもしれません。なぜなら、スレッドはすべて単一のプロセス メモリ空間のアドレス指定にあるからです。それらは、同じプロセス空間で表示および読み取り/書き込みを行うことができます。

于 2012-11-12T14:17:23.053 に答える
2

正直なところ、あまりありません。Linux では、OS レベルのスレッドはありません。1 つのプロセス、1 つのスレッド。したがって、pthreads を使用する場合、実際には、スレッド固有のストレージ領域以外のすべてのメモリを共有する複数のプロセスを使用していることになります。ただし、OSX などの別の UNIX では、そうではない場合があります。psしかし、単純な pthreads プロセスを作成し、それをバックグラウンドで実行し、シェル プロンプトで入力すると、これを自分で確認できます。

于 2012-11-12T14:14:52.393 に答える