私はこのようなコードに出くわしました
int main(void){
pid_t pid;
char sharedVariable='P';
char *ptrSharedVariable=&sharedVariable;
pid = fork()
if(pid==0) {
sharedVariable = 'C';
print("Child Process\n");
printf("Address is %p\n", ptrSharedVariable);
printf("char value is %c\n", sharedVariable);
sleep(5);
} else {
sleep(5);
print("Parent Process\n");
printf("Address is %p\n", ptrSharedVariable);
printf("char value is %c\n", sharedVariable);
}
スタック オーバーフローで学んだことから、親プロセスと子プロセスの char 値が異なることがわかります。子の値は「C」で、親の値は「P」です。また、親と子の両方のアドレスが同じである必要があることもわかります。これは、'sharedVariable'(&sharedVariable) へのアドレスです。
しかし、ここに私の質問があります。
- 異なるプロセスに異なる char 値を割り当てるポイントは何ですか? 一つには、各プロセスを pid==0 または >0 で既に識別できるため、このステップは冗長ではありませんか? もう 1 つの理由は、同じ仕事をする 2 つのプロセスを区別する意味がわからないことです。
- 親と子のアドレスを同じままにしておくのはなぜですか? それらは同様のタスクを続行すると想定されているため、コードをコピーして貼り付けるだけでよいため、そうすると便利だと思います。迷っているので確認したいです。
- fork() を vfork() に置き換えた場合、親の char 値の結果は「C」になりますか?
100 万前もって感謝します。