%d\n", -6ren">
gpt4 book ai didi

c - 在 fork 进程上使用相同的变量

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:53 24 4
gpt4 key购买 nike

我期待这段代码

void func(int* count)
{
*count += 1;

char* buf[100];
sprintf(buf, "%d -> %d\n", count, *count);
write(1, buf, strlen(buf));
}
int main()
{
int* count = 0;
int pid = fork();
if(pid == 0)
{
func(&count);
}
else
{
func(&count);
}

return 0;
}

将打印

1444711088 -> 1
1444711088 -> 2

因为 2 个 fork 使用相同的内存单元 (1444711088) 作为 count 变量,当其中一个修改它的值时,另一个会受到影响。但它没有按预期工作。它正在打印这个:

1444711088 -> 1
1444711088 -> 1

你能说出这段代码的问题在哪里吗?

最佳答案

你问:

Can you tell where is the problem with this code ?

代码有问题,但不是你认为的问题。您对 fork 进程如何工作的理解不太正确。

每个进程都有自己的进程内存空间副本。父进程的地址1444711088与子进程的地址1444711088不同。它们可以保存独立变化的值。

您的代码存在未定义的行为。

int* count = 0;

这会将指针初始化为 0,这不是一个有效地址。您是想使用:

int count = 0;

代替?

关于c - 在 fork 进程上使用相同的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com