1

2 つのプロセスが作成されます。

それぞれが入力0で関数を呼び出しますA(関数Aは他の.cファイルにあります)。

変数 x はグローバルである必要がありますが、プロセスごとにプライベートである必要があります。

ですのでx = y、各プロセスには独自の x があるようです。なぜ知りたいのですか?z が両方のプロセスで共有されるのはなぜですか?

int x;
int z;
void A(int y)
{
     x = y;
     x++;
     z++;
     B();
}
void B()
{
     x--;
}

main.c で

//2 process created and each of them call A(0)
4

5 に答える 5

2

正常な OS はプロセスを完全に分離するため、デフォルトでは、1 つのプロセスは他のプロセス メモリにアクセスできません。さらに説明が必要な場合は、質問してください。

明確にするために-グローバル変数は共有されていません。

于 2013-08-07T04:26:01.037 に答える
1

プロセスごとに . 独自のスタックメモリがあります。データ セグメントに格納されている静的な値。もちろん、プロセス private に属します。

于 2013-08-07T04:31:36.820 に答える
1

プロセスが生成されるたびに、そのプロセスは独自のアドレス空間を取得します。アドレス空間には、データ セグメント、スタック セグメント、ヒープ/BSS、およびコード セグメントが含まれます。プログラムでは、変数 x はグローバルであるため、そのプロセスのデータ セグメントにメモリが割り当てられます。

2 つまたは 100 のプロセスは、データ セグメントに x の独自のコピーを持ちます。これは、オペレーティング システムが実行中のプロセスにメモリを割り当てる方法です。

プロセス間で変数「x」を共有する必要がある場合は、少なくとも共有メモリを使用する必要があります。

于 2013-08-07T04:31:43.993 に答える
0

main に 2 つのスレッドを作成し、メソッド A() を呼び出した場合、次のことが発生する可能性があります。

  1. 2 つのスレッドによる A() メソッドの実行順序は不定です (どのスレッドが先に開始されてもかまいません)。

  2. たとえば、スレッド 1 が X++ まで A() メソッドを実行し、スレッド 2 が A() の実行を開始した場合、スレッド 2 は x 値をゼロではなく 1 と見なします (グローバル変数であるため)。

  3. グローバル変数 (この場合は x、z) がある場合、2 つのスレッドが同じグローバル値を共有します。

于 2013-08-07T06:17:36.530 に答える