gpt4 book ai didi

c++ - Linux 线程函数中的局部变量?

转载 作者:太空宇宙 更新时间:2023-11-04 09:49:37 26 4
gpt4 key购买 nike

struct node
{
public:
char *s;
int up;
node()
{
up = 0;
s = new char[1000];
memset (s, 0, sizeof(char) * 1000);
}
~node()
{
delete [] s;
}
void insert()
{
s[up++] = 'a';
}
};

void* test_thread(void *arg)
{
pthread_mutex_lock( &mutex1 );
node n;
n.insert();
printf ("%s\n", n.s);
printf ("%x\n", &n);
pthread_mutex_unlock( &mutex1 );
pthread_exit(0);
//return 0;
}

假设这个函数将被执行

pthread_create(&id1, NULL, test_thread, NULL);
pthread_create(&id2, NULL, test_thread, NULL);

它是由

编译的
g++ test_thread.cpp -o main -lpthread -g 

它的结果是

a
40a001a0
a
40a001a0

在我的Linux算子中,两个线程中节点n的地址是一样的!

我想知道为什么线程包含的节点n的地址相同?

任何答案表示赞赏~~~

谢谢~~~

最佳答案

对象“节点 n”是堆栈本地的,因此两个线程中的每一个都有自己的“节点”。这解释了为什么每次您只看到一个“a”,而不是其中的两个。

当第二个线程启动时,第一个线程可能已经完成,包括释放内存,以便第二个线程再次获得相同的内存块,这解释了相同的地址。

如果您希望两个线程都在同一个“节点”上工作,您需要将其设为全局变量,或者分配一个并将指针作为第四个参数传递给 pthread_create(),以便将其传递给 test_thread() .

关于c++ - Linux 线程函数中的局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553210/

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