3

如果一个进程和它的 fork 有不同的数据副本,那么为什么它们的指针是一样的呢?

在下面的示例中,如果 count 在父进程和子进程之间共享,我们将看到count: 2. 但是,计数不共享。但是,为什么&count在父进程和子进程中返回相同的值呢?

输出:

count: 1 0x7fff5a617510
count: 1 0x7fff5a617510

程序:

#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
    pid_t pid;
    int count = 0;

    pid = fork();

    count++;
    printf("count: %d %p \n", count, &count);

    return 0;
}
4

1 回答 1

3

如评论中所述,这是因为虚拟寻址。AFAIK 无法查看物理地址,因为这是由内核和 MMU 处理的。

另外,请注意,即使 count 在两个进程之间共享(使用共享内存;参见man shmget示例),也会存在竞争条件。

于 2013-06-14T16:22:33.820 回答